Cocoa/Objective-C Shell命令行执行

Tom*_*Tom 18 unix macos cocoa command-line objective-c

这可能是一个愚蠢的问题,但我如何从我的Cocoa应用程序执行shell命令?

我将命令作为字符串"命令",但可以根据需要轻松操作数据.

无需获取返回的输出值.

Qui*_*lor 30

使用NSTask非常容易.对于同步调用,您可以使用类似此片段的内容:

NSString *path = @"/path/to/executable";
NSArray *args = [NSArray arrayWithObjects:..., nil];
[[NSTask launchedTaskWithLaunchPath:path arguments:args] waitUntilExit];
Run Code Online (Sandbox Code Playgroud)

-waitUntilExit调用确保它在继续之前完成.如果任务可以是异步的,你可以删除该调用,让NSTask做它的事情.


BJ *_*mer 9

如果你只想运行某些东西并且不关心输出或返回代码(例如,你想要触摸文件),你可以做

system("touch myfile.txt");
Run Code Online (Sandbox Code Playgroud)

很简单.

  • 对`system`和`popen`非常非常小心.通过让角色进入它认为特殊的shell来引入漏洞很容易.NSTask和`fork` /`exec`更安全. (9认同)