我希望通过
使用NSTask
我可以在终端中执行的操作
$ myprogram myfile.ext
我知道myprogram
(我对此程序没有任何控制权)会启动另一个程序myauxprogram
。此外,myprogram
的路径为path1
,myprogram
的路径为path2
。
如果我这样做
NSTask * myTask = [[NSTask alloc] init];
NSArray * arguments = @[@"myfile.ext"] ;
[myTask setCurrentDirectoryPath:[URLOfTheFolder path]];
[myTask setLaunchPath:@"/path1/myprogram"];
[myTask setArguments:arguments];
[myTask launch] ;
我收到以下错误sh: myauxprogam: command not found
如果我在path1
到myauxprogram
中创建了符号链接,问题就是一样。
答案 0 :(得分:0)
看起来你大多都有这个想法,你只是缺少一些关键元素。 NSTask
应该有一个已定义的LaunchPath,例如/usr/bin/sh
,/usr/bin
等,具体取决于您需要设置参数和选项的路径类型。< / p>
NSTask *auxTask;
NSTask *auxPath = @"./path1/myprogram"; // period might be needed
NSTask *auxArgs = @"myfile.ext";
auxTask = [[NSTask alloc] init];
[auxTask setLaunchPath:@"/usr/bin/sh"]; // use shell
[auxTask setArguments:[NSArray arrayWithObjects:
@"-c", // -c will exec as shell cmd
auxPath,
auxArgs,
nil]];
// using `try` is optional
@try
{
[auxTask launch];
}
@catch(id exc)
{
auxTaskSuccess = NO;
}
[auxTask release];
return;
不知道这是否有效,但这是你可能设置的方式。如果您遇到错误问题或NSTask
失败,您可以使用auxTask NSLog
设置NSArray
,以确切了解它正在做什么。
答案 1 :(得分:0)
问题是:
您需要[myTask setEnvironment:...]
以便任务知道哪些是环境变量(PATH
等)。