Cocoaアプリからターミナルコマンドを実行する 質問する

Cocoaアプリからターミナルコマンドを実行する 質問する

grepObjective-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);

NSPipeNSFileHandleタスクの標準出力をリダイレクトするために使用されます。

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

おすすめ記事