プログラム / 2010/07/28 (Wed) / 編集 |
NSTaskを使ってコマンドを実行する関数のメモ。
実行結果をNSStringにするときにUTF8にしてるのは俺の環境の問題なので、場合によっては書き換えが必要。
あと既知のバグとして、NSString型で渡してるディレクトリ名(epubFileDir)やファイル名(epubFileName)にスペースが入っていると「not found」が帰ってくる。ちゃんとエスケープして「\ 」に置き換えてるのに。。。保存の時点で文字コード設定しないとだめなのかもしらんね。
実行結果をNSStringにするときにUTF8にしてるのは俺の環境の問題なので、場合によっては書き換えが必要。
あと既知のバグとして、NSString型で渡してるディレクトリ名(epubFileDir)やファイル名(epubFileName)にスペースが入っていると「not found」が帰ってくる。ちゃんとエスケープして「\ 」に置き換えてるのに。。。保存の時点で文字コード設定しないとだめなのかもしらんね。
返り値は、(UNIXのプログラムのルールに従ってるコマンドの結果なら)成功していたら0。
//「cd epubFileDir」して「ls -l epubFileName」 - (int)getFileList{ NSLog(@"getFileList"); NSTask* task = [ [ NSTask alloc ] init ]; NSPipe* pipeStd = [ NSPipe pipe ]; NSPipe* pipeErr = [ NSPipe pipe ]; // 標準出力の指定 [task setStandardOutput:pipeStd]; // 標準エラー出力の指定 [task setStandardError :pipeErr]; // 実行 [task setLaunchPath:@"/bin/ls"]; [task setCurrentDirectoryPath:epubFileDir];//コマンドを実行するディレクトリのパス [task setArguments:[NSArray arrayWithObjects:@"-l",epubFileName,nil]];//コマンドのオプション NSLog(@"%@",[[task arguments] description]);//設定したオプションを出力してみる。 [task launch];//開始 [task waitUntilExit];//終わるまでまつ。 NSLog(@"end execute"); { // 標準出力の読み出し NSData* dataStd = [[pipeStd fileHandleForReading ] availableData ]; NSString* strStd = [[NSString alloc] initWithData:dataStd encoding:NSUTF8StringEncoding]; NSLog(@"std out --\n%@",strStd); } { // 標準エラーの読み出し NSData* dataErr = [[pipeErr fileHandleForReading ] availableData ]; NSString* strErr = [[NSString alloc] initWithData:dataErr encoding:NSUTF8StringEncoding]; NSLog(@"std err --\n%@",strErr); } return ([task terminationStatus]);//成功してたら(だいたい)0 }
PR
トラックバック
URL :
コメント