gpt4 book ai didi

objective-c - 将值从 NSTextField 发送到持续运行的 NSTask

转载 作者:行者123 更新时间:2023-12-03 16:55:16 26 4
gpt4 key购买 nike

有几个与 NSTask 相关的问题,但翻阅它们后我仍然不知道该怎么做。

我正在 Cocoa 中为 java 服务器编写前端,由 java -Xmx1024M -Xms1024M -jar server.jar nogui 启动(我省略了 nogui arg 在我当前的代码中,以免用不必要的孤立服务器实例填满我的计算机)。

我当前的代码正确运行.jar文件;现在我需要一种方法来捕获(和解析)输出并将输入发送到流程。

server = [[NSTask alloc] init];
pipe = [NSPipe pipe];
NSArray *args = [NSArray arrayWithObjects:@"-Xms1024M",
@"-Xmx1024M",
@"-jar",
@"server.jar",
nil];

[server setLaunchPath:@"/usr/bin/java"];
[server setCurrentDirectoryPath:@"MyApp.app/Contents/Resources/"];
[server setArguments:args];
[server setStandardOutput:pipe];
[server setStandardInput:pipe];
[server launch];

我已经阅读了 NSPipeNSTask 以及所有内容,但我似乎找不到适合我的问题的答案:

  • 实时、解析(RegEx?)输出到 NSTextViewNSTableView
  • 来自 NSTextField 的输入

编辑:或者我应该使用launchd?我该怎么做?

最佳答案

您需要创建两个管道:一个用于任务的标准输入,另一个用于任务的标准输出。您现在正在做的事情将任务的输出连接到它自己的输入。

类似这样的事情:

@interface ServerController : NSObject
@property (strong) NSFileHandle *standardInput;
@property (strong) NSFileHandle *standardOutput;
@end

@implementation ServerController

...

- (void)launchServer {
NSPipe *standardInputPipe = [NSPipe pipe];
self.standardInput = standardInputPipe.fileHandleForWriting;
NSPipe *standardOutputPipe = [NSPipe pipe];
self.standardOutput = standardOutputPipe.fileHandleForReading;
...
server.standardInput = standardInputPipe;
server.standardOutput = standardOutputPipe;
[server launch];
}

...

现在,您可以通过将 writeData: 消息发送到 ServerController 实例的 standardInput 属性来写入服务器。要从服务器读取数据,您需要在 standardOutput 属性上使用 readInBackgroundAndNotifyreadabilityHandler

关于objective-c - 将值从 NSTextField 发送到持续运行的 NSTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8290745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com