2009-09-25 3 views
18

これはおそらく愚かな質問ですが、私のCocoaアプリケーションからシェルコマンドを実行するにはどうすればいいですか?Cocoa/Objective-Cシェルコマンドライン実行

私はコマンドを文字列 "コマンド"として持っていますが、必要に応じて簡単にデータを操作できます。

返される出力値を取得する必要はありません。 NSTaskクラスを使用

+1

[Cocoaアプリからの端末コマンドを実行する](0120-18753,) – outis

+1

もこの質問を参照してください:http://stackoverflow.com/questions/412562/execute-a-terminal-command-from-a-cocoa-app/696942#696942 – kent

答えて

30

NSTaskはこれを行うにはかなり簡単です。同期呼び出しでは、このフラグメントのようなものを使用することができます。

NSString *path = @"/path/to/executable"; 
NSArray *args = [NSArray arrayWithObjects:..., nil]; 
[[NSTask launchedTaskWithLaunchPath:path arguments:args] waitUntilExit]; 

-waitUntilExit呼び出しが、それは先に進む前に終了を確認します。タスクが非同期である可能性がある場合、その呼び出しを削除して、NSTaskにそれを実行させることができます。

3

NSTask

、あなたのプログラムは、サブプロセスとして別のプログラムを実行することができますし、そのプログラムの実行を監視することができます。

9

あなただけの何かを実行すると、出力または戻りコードを気にしない場合(たとえば、あなたがファイルをタッチします)、あなたはちょうどそのよう

system("touch myfile.txt"); 

簡単に行うことができます。

+9

'system'と' popen'には非常に注意してください。特殊文字と見なされる文字をシェルに通すことで脆弱性を導入するのは簡単です。 NSTaskと 'fork' /' exec'ははるかに安全です。 –

関連する問題