我有一个调用NSTask的应用程序(我已经编写了NSTask和App代码),并且NSTask在需要将行写到控制台的地方调用NSLog。
问题是我从NSTask中看到了控制台消息,然后我看到了由调用进程输出的相同消息,带有双标头...
5/16/11 5:50:01 PM theNSTask[7934] BLAH BLAH BLAH
[0x0-0x256256].com.someid[7505] 2011-05-16 17:50:01.708 theNSTask[7934:903] BLAH BLAH BLAH
超级令人困惑,只是读取所需的输出(BLAH BLAH BLAH)。有魔术设置可以解决此问题吗?
谢谢,
-汤姆
NSTask* task = [[NSTask alloc] init];
NSString* path = [[NSBundle mainBundle] pathForAuxiliaryExecutable:@"theNSTask"];
[task setLaunchPath:path];
NSMutableArray* arguments = [NSMutableArray array];
// get the dict as base64 string (start with binary plist):
NSString* base64Dict = [[self class] base64FromDictionary:message];
[arguments addObject:base64Dict];
[task setArguments:arguments];
[task launch];
[self.runningTasks addObject:task];
[task release];
最佳答案
我的猜测是,该任务会将消息直接记录到控制台,也记录到其标准输出,默认情况下,该消息与您的应用程序发送到控制台的父进程的标准输出相同。
如果是这样,那么您应该可以通过将任务的标准输出设置为/dev/null
来修复它,例如:
NSFileHandle *nullFileHandle = [NSFileHandle fileHandleWithNullDevice];
[task setStandardOutput:nullFileHandle];
[task setStandardError:nullFileHandle];
关于objective-c - NSTask +在任务中调用NSLog导致向控制台双重打印消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6023979/