NSTask:是否存在进程的启动路径

yol*_*olo 2 cocoa process filepath nstask

此代码用于获取该过程的标准输出

    NSTask       * task;
    NSPipe       * pipe;
    NSFileHandle * fileHandle;

    task       = [ [ NSTask alloc ] init ];
    pipe       = [ NSPipe pipe ];
    fileHandle = [ pipe fileHandleForReading ];

    [ task setLaunchPath: @"/usr/bin/lspci" ];
    [ task setArguments:[NSArray arrayWithObject:@"-nn"]];
    [ task setStandardOutput: pipe ];
    [ task setStandardError: pipe ];
    [ task launch ];
    [ task waitUntilExit]; 
    [ task release];

    NSData *outputData = [[pipe fileHandleForReading] readDataToEndOfFile];

    NSString *outputString = [[[NSString alloc] initWithData:outputData encoding:NSUTF8StringEncoding] autorelease];
Run Code Online (Sandbox Code Playgroud)

由于/usr/bin/lspci某些系统上不存在此致命错误,

由于未捕获的异常“ NSInvalidArgumentException”而终止应用程序,原因:“无法访问启动路径”

如何事先检查lspci确实存在,如果不存在则向用户显示错误消息?

ham*_*ene 5

要检查文件是否存在并且可执行:

BOOL exists = [[NSFileManager defaultManager] isExecutableFileAtPath:[task launchPath]];
Run Code Online (Sandbox Code Playgroud)

丢失文件不是您可以获取异常的唯一原因。您应该始终使用@try- @catch块。