grep
Objective-C Cocoa アプリケーションからターミナル コマンド (など) を実行するにはどうすればよいですか?
ベストアンサー1
を使用できますNSTask
。以下は ' ' を実行する例です/usr/bin/grep foo bar.txt
。
int pid = [[NSProcessInfo processInfo] processIdentifier];
NSPipe *pipe = [NSPipe pipe];
NSFileHandle *file = pipe.fileHandleForReading;
NSTask *task = [[NSTask alloc] init];
task.launchPath = @"/usr/bin/grep";
task.arguments = @[@"foo", @"bar.txt"];
task.standardOutput = pipe;
[task launch];
NSData *data = [file readDataToEndOfFile];
[file closeFile];
NSString *grepOutput = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog (@"grep returned:\n%@", grepOutput);
NSPipe
NSFileHandle
タスクの標準出力をリダイレクトするために使用されます。
Objective-C アプリケーション内からオペレーティング システムと対話する方法の詳細については、Apple の開発センターにある「オペレーティング システムとの対話」というドキュメントを参照してください。
編集: NSLogの問題に対する修正を追加しました
NSTask を使用して bash 経由でコマンドライン ユーティリティを実行している場合は、NSLog が動作し続けるように次のマジック ラインを含める必要があります。
//The magic line that keeps your log where it belongs
task.standardOutput = pipe;
説明はここにあります: https://web.archive.org/web/20141121094204/https://cocoadev.com/HowToPipeCommandsWithNSTask