执行终端命令

时间:2011-12-14 11:07:24

标签: objective-c linux macos

我想从objective-c项目中运行一个终端命令。

当我从终端运行它时,我使用:

cd /Users/user/Desktop/project/;ant release

现在我在Objective-C项目中使用了它:

NSTask *task = [NSTask new];
[task setLaunchPath:@"cd /Users/user/Desktop/project/;ant"];
[task setArguments:[NSArray arrayWithObjects:@"release", nil]];

NSPipe *pipe = [NSPipe pipe];
[task setStandardOutput:pipe];

[task launch];

NSData *data = [[pipe fileHandleForReading] readDataToEndOfFile];

[task waitUntilExit];
[task release];

NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog (@"got\n%@", string);
[string release];

[task launch];之后我收到错误:

launch path not accessible

修改

我尝试使用此命令进行检查:

[task setCurrentDirectoryPath:@"/Users/user/Desktop/Czech/"];
[task setLaunchPath:@"/bin/ls"];

它仍然给我一个警告:

working directory doesn't exist.

2 个答案:

答案 0 :(得分:3)

您需要以不同的方式设置工作目录:

[task setCurrentDirectoryPath:@"/Users/user/Desktop/project"];

然后将setLaunchPath:调用更改为指向实际可执行文件的位置:

[task setLaunchPath:@"/usr/bin/ant"];

答案 1 :(得分:0)

嗯,你试着在这里执行一个shell行。

首先尝试更改目录(至/Users/blabla),然后发出ant命令。我的猜测是该程序试图找到一个名为cd /Users/user/Desktop/project/;ant的命令。