Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

NSTask

とても久しぶり(半年ぶり?)にCocoaを触ってみた。前からやってみたかった、コマンドを叩くってのにチャレンジ。




//初期化処理
NSPipe *pipe = [NSPipe pipe];
NSTask *task = [[NSTask alloc] init];
NSFileHandle *fh;
NSData *result_data;
NSString *result_str;

//タスクの準備
[task setStandardOutput: pipe];
[task setStandardError : pipe];
[task setLaunchPath: @"/usr/bin/perl"];
[task setArguments: [NSArray arrayWithObjects: @"-e", [sender stringValue], nil]];

//タスクの実行&処理終了まで待機
[task launch];
[task waitUntilExit];

//実行結果の取り出し
fh = [pipe fileHandleForReading];
result_data = [fh availableData];
result_str = [NSString stringWithFormat : @"%s\n", [result_data bytes]];
[text_field setStringValue: result_str];

//終了処理
[task release];






テキストボックスの入力をperlコマンドとして実行して結果を表示するだけなのだが、普段慣れていない環境だけに、案外苦戦してしまった(--;。一番苦戦したとこは、単に[task launch]を書き忘れて固まっていただけと言う話もあったりするのだが(笑)。



ちなみに、このコードだとperl環境変数系のエラーを吐いたり、標準エラー出力側でなぜかゴミを拾ったりしてしまう。原因は調査中。