cocoa - 运行 a 命令时将 `stdout` 放入 `NSTextView` 中

标签 cocoa user-interface command-line stdout

我正在创建一个 Cocoa 应用程序,它需要运行 rails 命令。此命令生成一个输出,并将其流式传输到 stdout。我想在 NSTextView 中向用户显示此输出(因此基本上将 stdout 流式传输到 NSTextView)。当命令运行时,我的应用程序不应“挂起”(例如,git 命令需要很长时间才能完成上传)。我并不真正关心应该如何运行命令,只要我可以设置工作目录即可。

对 Cocoa 使用 Ruby 框架不是一个选择,因为我还需要对 git 等非 ruby​​ 命令执行此操作。

有人可以帮助我吗?谢谢

最佳答案

您将需要使用NSTask类。

NSTask       * task;
NSPipe       * pipe;
NSFileHandle * fileHandle;

task       = [ [ NSTask alloc ] init ];
pipe       = [ NSPipe pipe ];
fileHandle = [ pipe fileHandleForReading ];

[ fileHandle readInBackgroundAndNotify ];
[ task setLaunchPath: @"/bin/ls" ];
[ task setStandardOutput: pipe ];
[ task setStandardError: pipe ];
[ task launch ];

然后您可以使用文件句柄来获取标准输出。
可以使用 setCurrentDirectoryPath 方法设置工作目录。
可以使用 setArguments 方法设置参数。

关于cocoa - 运行 a 命令时将 `stdout` 放入 `NSTextView` 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2704295/

相关文章:

PHP脚本在通过命令行而不是通过浏览器运行时给出输出

cocoa - 将固件下载到设备时更新进度指示器

macos - 找不到符号 _OBJC_IVAR_$_NSView._layer(在 AppKit 中)仅在 10.7 上,在 10.8 和 10.9 上工作正常

css - 关于CSS Image Sprite的建议

objective-c - 写入 USB 设备时 NSTextView 未循环更新

android - 如何显示数字时钟小部件的秒数?

command-line - R - 将 R 输出的元素捕获到文本文件中

linux - 为什么命令行说进程在后台运行后停止?

objective-c - CoreData主应用和后台进程,数据相同

objective-c - NSTableview刷新异步加载数据