我是 Objective-C 的新手,所以如果我遗漏了什么,请原谅我。但我们都必须从某个地方开始:)
我有一个从另一个开源项目获得的代码片段,它执行一个命令并将结果传递给另一个方法。我需要做的是听取打印到标准输出的每一行新行并对每一行做一些事情。
我正在使用的代码片段如下:
NSMutableArray *args = [NSMutableArray array];
NSString *input = [details valueForKey:@"input"];
for (NSString *i in [input componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]) {
[args addObject:i];
}
NSTask *scriptTask = [NSTask new];
NSPipe *outputPipe = [NSPipe pipe];
if ([_NSFileManager() isExecutableFileAtPath:scriptPath] == NO) {
NSArray *chmodArguments = @[@"+x", scriptPath];
NSTask *chmod = [NSTask launchedTaskWithLaunchPath:@"/bin/chmod" arguments:chmodArguments];
[chmod waitUntilExit];
}
[scriptTask setStandardOutput:outputPipe];
[scriptTask setLaunchPath:scriptPath];
[scriptTask setArguments:args];
NSFileHandle *filehandle = [outputPipe fileHandleForReading];
[scriptTask launch];
[scriptTask waitUntilExit];
NSData *outputData = [filehandle readDataToEndOfFile];
NSString *outputString = [NSString stringWithData:outputData encoding:NSUTF8StringEncoding];
if (NSObjectIsNotEmpty(outputString)) {
[self.world.iomt inputText:outputString command:IRCPrivateCommandIndex("privmsg")];
}
因此,与其等待过程完成然后对结果做一些事情,我需要等待命令打印到标准输出的每一行新行。
我的背景主要是 web 开发,所以我想如果你使用 Node.js 和事件发射器,我的目标会类似于以下内容:
task = new Task("ls");
task.addListener("newline", function(data) {
somethingElse("sendmsg", data);
});
task.run();
希望您了解我要实现的目标。谢谢!