我正在使用Objective-C开发一个macOS应用程序,我想运行一些像终端一样的命令。其实我想从我的应用程序运行YOLO命令。我正在使用NSTask类。 当我通过代码运行命令时,在任务启动时,我收到错误“无法打开文件cfg / coco.data”。 相同的命令适用于终端但不适用于我的应用程序。
这是我的代码:
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath:@"/bin/bash"];
NSString *commandToRun = @"Desktop/darknet/ && ./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg";
NSArray *arguments = [NSArray arrayWithObjects:
@"-c",
[NSString stringWithFormat:@"%@", commandToRun],
nil];
NSLog(@"run command: %@",commandToRun);
[task setArguments: arguments];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
NSData *data;
data = [file readDataToEndOfFile];
NSString *output;
output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
答案 0 :(得分:0)
NSTask不是shell。它比那更低级。你不能在那里运行完整的shell表达式,只需要一个命令。所以你的commandToRun毫无意义,它应该只是运行命令的路径。
答案 1 :(得分:0)
您可以使用system c函数来运行命令,但它无法控制细节。