NSTask检索停止在Lion上工作的外部命令的输出

时间:2012-02-02 14:37:18

标签: objective-c cocoa osx-lion nsdata nstask

以下代码正常运行,直到我升级到OSX Lion。它调用了一个外部命令并将输出保存到NSString中。

我不知道它为什么停止工作。有什么想法吗?

-(NSString *) rawResponse{
    NSTask *task = [[NSTask alloc] init];
    [task setLaunchPath:@"/usr/sbin/scselect"];

    NSPipe *pipe = [NSPipe pipe];
    [task setStandardError:pipe];
    [task launch];
    NSData *data = [[pipe fileHandleForReading] readDataToEndOfFile];
    [task waitUntilExit];
    [task release];
    NSString *result = [[[NSString alloc] initWithData:data 
                                             encoding:NSUTF8StringEncoding] autorelease];

    NSLog(@"The returned value is: %@", result);

    return result;
}

1 个答案:

答案 0 :(得分:0)

我刚刚发现了。我正在将NSPipe分配给标准错误,因为在Snow Leopard / usr / sbin / scselect中将其输出发送到那里,而不是标准输出。显然,Lion中的新版本修复了此问题(并破坏了我的代码)。