需要在Cocoa应用程序中执行命令

时间:2017-01-26 08:54:48

标签: objective-c macos nstask

我正在使用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];

2 个答案:

答案 0 :(得分:0)

NSTask不是shell。它比那更低级。你不能在那里运行完整的shell表达式,只需要一个命令。所以你的commandToRun毫无意义,它应该只是运行命令的路径。

答案 1 :(得分:0)

您可以使用system c函数来运行命令,但它无法控制细节。