【问题标题】:How to run a shell command in cocoa and get output?如何在可可中运行 shell 命令并获得输出?
【发布时间】:2011-12-28 22:46:06
【问题描述】:

经过反复搜索,我没有找到一个优雅的解决方案:如何在 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中读取输出吗?如果有怎么办?

【问题讨论】:

  • 请重新格式化您的问题以提高可读性。
  • 对不起,我假设后端会自动解析 url。
  • 有些段落也会有很大的改进。
  • 这令人困惑。你在可可中运行shell命令吗? (在应用程序中?)还是在终端中?
  • 在我的预期应用程序中,我将在一个越狱的 iOS 设备上运行该命令,然后使用输出创建一个漂亮的表。我希望用户能够将自定义参数传递给命令,否则我将直接集成 C 代码。

标签: objective-c cocoa shell nstask


【解决方案1】:

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

【讨论】:

  • 感谢您指出这一点,最初我错过了从临时文件中读取并获取脚本的退出代码,怪罪于我在凌晨 2:30 阅读它。今天早上头脑清晰,我能够拆开这个功能并让它工作。
【解决方案2】:

查看类PRHTask。它是NSTask 的替代品,带有完成块。 https://bitbucket.org/boredzo/prhtask

从标题中提取:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 2019-11-13
      • 2012-10-08
      • 1970-01-01
      相关资源
      最近更新 更多