2009-09-25 147 views
18

這可能是一個愚蠢的問題,但是我如何從我的Cocoa應用程序執行shell命令?可可/ Objective-C Shell命令行執行

我有一個命令作爲字符串「命令」,但可以根據需要輕鬆操作數據。

沒有必要獲得返回的輸出值。

+1

可能的重複[從Cocoa應用程序執行終端命令](http://stackoverflow.com/questions/412562/execute-a-terminal-command-from-a-cocoa-app) – outis 2012-06-23 20:01:08

+1

也看到這個問題:http://stackoverflow.com/questions/412562/execute-a-terminal-command-from-a-cocoa-app/696942#696942 – kent 2009-09-25 12:40:35

回答

30

NSTask很容易做到這一點。對於同步調用,您可以用這樣的片段:

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

-waitUntilExit調用確保它繼續之前完成。如果任務可以是異步的,您可以刪除該呼叫,只需讓NSTask執行該操作即可。

3

NSTask

使用NSTask類,程序可以運行另一個程序作爲子進程,並可以監視程序的執行。

9

如果你只是想運行的東西,不關心輸出或返回代碼(例如,你想觸摸的文件),你可以做

system("touch myfile.txt"); 

易爲。

+9

對'system'和'popen'非常非常小心。通過讓角色穿過它認爲特別的shell來引入漏洞很容易。 NSTask和'fork' /'exec'更安全。 – 2009-09-25 03:29:52