此代码用于获取进程的标准输出
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
在某些系统上不存在,因此会发生此致命错误
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'启动路径无法访问'
如何事先检查lspci
是否存在,如果没有,则向用户显示错误消息?
答案 0 :(得分:5)
检查文件是否存在且可执行:
BOOL exists = [[NSFileManager defaultManager] isExecutableFileAtPath:[task launchPath]];
缺少文件并不是您获得例外的唯一原因。您应始终使用@try
- @catch
阻止。
答案 1 :(得分:1)
BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:@"/usr/bin/lspci"];
if (!exists) {
// handle error...
}