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

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

由于某些系统上不存在/usr/bin/lspci,因此出现此 fatal error

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'launch path not accessible'

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

最佳答案

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

BOOL exists = [[NSFileManager defaultManager] isExecutableFileAtPath:[task launchPath]];

丢失文件并不是您遇到异常的唯一原因。您应该始终使用 @try-@catch block 。

关于cocoa - NSTask:进程的启动路径是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7050018/

相关文章:

javascript - 在 javascript 中用于文件路径验证的正则表达式

objective-c - 为什么使用单例?

C#:即使进程已终止,Process.HasExited 也会返回 false

java - 获取 JRuby jar 路径

exception - Erlang - 进程太多

c++ - 在 Linux 中使用 C++ 显示进程

windows - node npm windows 文件路径太长无法安装包

cocoa - 从扩展坞恢复应用程序

objective-c - Cocoa:NSURLConnection 不尝试 HTTP 请求

iphone - 在 Objective-c 中迭代类成员