| プログラム / 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 :
コメント
