NSTask + вызов NSLog в задаче приводит к двойной печати сообщений на консоль - PullRequest
2 голосов
/ 17 мая 2011

У меня есть приложение, которое вызывает 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

Слишком запутаннопрочитайте желаемый результат (БЛА БЛА БЛА).Есть ли магический параметр, который решает эту проблему?

Спасибо,

- Том

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];

1 Ответ

6 голосов
/ 17 мая 2011

Я предполагаю, что задача - записывать сообщения непосредственно на консоль, а также на ее стандартный вывод, который по умолчанию совпадает с потоком стандартного вывода родительского процесса, который ваше приложение отправляет на консоль.

Если это так, то вы сможете исправить это, установив стандартный вывод задачи на /dev/null, например:

NSFileHandle *nullFileHandle = [NSFileHandle fileHandleWithNullDevice];
[task setStandardOutput:nullFileHandle];
[task setStandardError:nullFileHandle];
...