我已经阅读了使用NSTask执行此操作的解决方案:它们看起来都非常长...所以我设法使用此代码执行完全相同的操作(它同时获得标准输出和标准错误):
NSTask *task = [NSTask new];
[task setLaunchPath:@"/bin/sh"];
[task setArguments:@[ @"-c", @"aCommand"]];
NSString *stringToRemove = [task description];
[task launch];
NSString *output = [[task description] stringByReplacingOccurrencesOfString:stringToRemove withString:@""];
使用此解决方案有任何缺点吗?是否有更短的方法来过滤输出?
答案 0 :(得分:3)
使用此解决方案有任何缺点吗?有没有更短的路要走 过滤输出?
是的,很多弊端。您依赖于description
将神奇地返回任务的命令行和输出的实现细节。文档没有声明这一点,description
在调试/日志记录之外使用它是真的可以接受的。
即。该代码仅适用于方便。
但该代码并没有真正起作用。如果您要运行的命令从不退出或需要一段时间才能运行或产生大量输出,那么该代码可能实际上根本不会获取任何输出或者会截断输出。
使用NSTask
的示例往往有点冗长是有原因的。管理进程之间的I / O实际上非常困难,需要考虑很多不同的选项。