我正在尝试使用 NSTask 运行 UNIX 'apropos' 命令。这是我的代码:
NSTask *apropos = [[NSTask alloc] init];
NSPipe *pipe = [[NSPipe alloc] init];
[apropos setLaunchPath:@"/usr/bin/apropos"];
[apropos setArguments:[NSArray arrayWithObjects:@"filename", @"match", nil]];
[apropos setStandardOutput:pipe];
[apropos launch];
[apropos waitUntilExit];
问题是这永远不会回来。我还尝试使用 Apple 的示例代码 (TaskWrapper),它返回输出(分三段),但它从不调用 processFinished 处理程序。
此外, appendOutput: 处理程序接收重复项。因此,例如,如果 apropos 返回以下内容:
1 2 3 4 5
我可能会收到这样的信息:
1 2 3
1 2 3 4
5
(分为 3 条附加消息)。
我注意到 Apropos 以一种可以在命令行中上下滚动的格式显示输出,而不是直接将数据直接输出到标准输出;如何通过 NSTask 和 NSPipe 可靠地阅读此内容?