有没有办法从system()获取日志;就像当我做system("open com.apple.nike");
一样,我应该得到Couldn't open application: com.apple.nike. Reason: 8, application disabled or restricted
。这将在我的iOs 7设备上运行
谢谢
编辑://://
这是新代码,但无法正常工作,我会得到
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'launch path not accessible'
*** First throw call stack:
NSString *bundleID = @"com.apple.nike";
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath: @"sudo"];
[task setArguments: [[NSArray alloc] initWithObjects:[NSString stringWithFormat:@"open %@", bundleID], nil]];
NSPipe *pipe= [NSPipe pipe];
[task setStandardOutput: pipe];
NSFileHandle *file = [pipe fileHandleForReading];
[task launch];
NSData *data = [file readDataToEndOfFile];
NSString *output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"result: %@", output);
最佳答案
我知道这并不是您所要的,但也许有更好的方法。
如果您想运行命令(例如open com.apple.nike
),我认为使用NSTask实际上是以编程方式执行此操作的最佳方法。 NSTask
将允许您像system()
一样运行命令,但是对处理这些命令的标准输出提供了很好的支持,而无需在系统日志文件上执行文件I / O。
例如,这是一个使用NSTask
列出目录内容(ls -altr
),并在NSString
中捕获输出的示例:
- (void) listDir {
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/ls"];
[task setArguments: [[NSArray alloc] initWithObjects: @"-altr", nil]];
NSPipe *pipe= [NSPipe pipe];
[task setStandardOutput: pipe];
NSFileHandle *file = [pipe fileHandleForReading];
[task launch];
NSData *data = [file readDataToEndOfFile];
NSString *output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"result: %@", output);
}
这将使您打开命令的输出与系统日志文件中的任何其他内容分开。
NSTask
是iOS上的 private API,但是与OS X上存在的许多API一样,它们实际上可以在iOS上使用(只是不要假设Apple允许它们在App Store中使用!)。要使用它,您需要下载NSTask.h标头,并将其包含在您的项目中。
Here's an old version,但我敢打赌它仍然可能有效。
关于ios - 如何从system();获取日志?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21862935/