如何在cocoa中运行shell命令并获取输出?

时间:2011-12-28 22:46:07

标签: objective-c cocoa shell nstask

经过反复搜索,我还没有找到一个优雅的解决方案:如何在obj-c中运行shell命令并获取它的输出。我已经阅读了很多关于此的问题,但他们都没有回答我的问题。

有些人获得退出值(Get result from shell script objective-c)其他人只运行命令(Cocoa/ Objective-C Shell Command Line Execution),最后其他人让我将输出写入文件(Execute a terminal command from a Cocoa app)。

我真的想避免写/读文件,因为它不是一个非常干净的解决方案。

是否无法直接在obj-c中读取输出?如果是这样的话?

3 个答案:

答案 0 :(得分:2)

来自第一个链接(Get result from shell script objective-c)的“doshellscript”中的代码实际上确实返回了带有命令输出的NSString。如果它不适合你,也许命令输出的是stderr而不是stdin?你试过这个吗?在Cocoa中运行命令的标准机制是NSTask,所以至少从那里开始。

答案 1 :(得分:2)

查看班级PRHTask。它是完整块的NSTask的替代。 https://bitbucket.org/boredzo/prhtask

从标题中提取:

  
      
  • 首先,您可以告诉任务为您累积输出,并在任务完成时检索它,而不必为标准输出和错误设置自己的管道。
  •   
  • 其次,当进程退出时,PRHTask将调用您提供的两个块中的任何一个,而不是发布NSNotification。如果需要,可以将它们设置为同一个块。
  •   

答案 2 :(得分:0)

如果您的任务需要管理员权限,您可能需要查看STPrivilegedTask