2011-05-16 2 views
1

나는 NSTask (NSTask 및 App 코드를 작성했습니다)를 호출하는 앱을 가지고 있으며 NSTask는 NSLog를 작성한 행의 위치에서 호출합니다 밖으로 콘솔.NSTask + 작업에서 NSLog를 호출하면 콘솔에 메시지가 이중으로 인쇄됩니다.

문제

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 

슈퍼 혼란 단지 원하는 출력을 읽어 ... I 다음 I 이중 헤더, 호출 한 프로세스에 의해 동일한 메시지 출력을 참조 NSTask에서 콘솔 메시지를 볼 수 있다는 것이다 (ㅋ ㅋ ㅋ ㅋ ㅋ ㅋ). 이 문제를 해결하는 마법 설정이 있습니까?

감사합니다,

--Tom

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

답변

5

내 생각 엔 작업이 콘솔로도 기본적으로 같은 스트림이 같다 표준 출력에 직접 메시지를 로깅이다 부모 프로세스의 표준 출력으로, 앱이 콘솔로 전송합니다.

그게 사실이라면, 다음과 같은 /dev/null에 작업의 표준 출력을 설정하여 문제를 해결 할 수 있어야한다 :

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

감사 - 올바른 경로를 날 실망했다. 어떤 이유로 든 setStandardError : nullFileHandle을 호출해야했습니다. 또한 자동 해제 개체로 null 파일 핸들을 닫아야한다고 생각하지 않으며 닫을 실제 파일이 없습니까? –

+0

표준 출력 대신 또는 표준 출력 외에 콘솔 로깅이있는 것 같습니다. 또한 파일 설명자를 닫을 필요가 없다고 생각합니다. 나는이 문안 [참조] (http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSFileHandle_Class/Reference/Reference.html#//apple_ref/occ/clm/)을 잘못 해석했다. NSFileHandle/fileHandleWithNullDevice) : "파일 핸들은 연관된 파일 설명자를 소유하고 있으며이를 닫아야합니다." –

관련 문제