有人可以展示一个简单的例子来说明如何结合使用 NSTask 和 NSPipe 来做到这一点:
Charlie AI - 通过终端运行与 AI 通信
我想使用 xcode 和 objective c 为它创建一个漂亮的 GUI。我想要 2 个 NSTextFields 用于查理的响应和用户输入。然后有一个发送按钮将用户输入发送到命令行,然后获取查理的响应并将其发布到 NSTextField 中。
我可以处理 GUI 的东西(NSTextField 等),但我需要 objective-c 编码部分的帮助。
谢谢!
以利亚
最佳答案
Apple 有一些很好的示例代码,展示了如何完成其中的大部分工作。
TaskWrapper.m
包含所有聪明的东西,但由于您希望能够将数据发送到任务,因此您需要对其进行一些扩展,如下所示:
[task setStandardInput: [NSPipe pipe]];
要向任务发送输入,您可以执行以下操作:
[[[task standardInput] fileHandleForWriting] writeData: ...];
要将 NSTextField 的值转换为数据,您可以这样做:
NSData *data = [[inputTextField stringValue]
dataUsingEncoding:NSUTF8StringEncoding];
...并为您的子任务设置当前工作目录,使用
[NSTask setCurrentDirectoryPath:]
例如
[task setCurrentDirectoryPath: @"/blah/blah"];
[task setLaunchPath: @"/blah/blah/server.sh"];
.... (other setup code)
[task launch];
关于objective-c - NSTask 和 NSPipe 示例与命令行 objective-c 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3208696/