忍者ブログ
MASTER →  ADMIN / NEW ENTRY / COMMENT
現代魔法(nearly equal 情報技術)を勉強中な人のメモ(チラシの裏)
/ 2024/11/21 (Thu) / 編集
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

/ 2010/07/28 (Wed) / 編集
NSTaskを使ってコマンドを実行する関数のメモ。

実行結果を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
}

拍手[1回]

PR
忍者ブログ [PR]