2009-09-25 169 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