我正在尝试学习编写 NSTask ,以便任务进程可以接受输入文件重定向作为参数。在传统的unix system()命令中,这对于代码来说是微不足道的,但是对于我的应用程序的需求来说太远了。我想要理解的例子是哪个参数属于其中。这是完整的命令,可以输入 stdin 或传递给 system():
cd /Users/Shared ; /usr/local/bin/C_command < /Users/Shared/s.txt
其中 C_command 代表标准 unix 命令行工具,该工具接受重定向为从文件读取的输入参数,与写入完全相同。然后启动路径为:
task.launchPath = @"/usr/local/bin/C_command";
目前的目录必须是:
task.currentDirectoryPath = @"/Users/Shared";
如果将以下内容作为参数:
NSArray *args = [NSArray arrayWithObjects:[NSString stringWithFormat: @" < /Users/shared/s.txt"], nil];
甚至是这样:
NSArray *args = [NSArray arrayWithObjects:[NSString stringWithFormat: @" < "], [NSString stringWithFormat: @"/Users/shared/s.txt"], nil];
我显然做错了什么,错过了一些显而易见的重要事情,但却无法弄清楚是什么。提示非常受欢迎。谢谢!
答案 0 :(得分:2)
输入重定向只使用文件的内容而不是stdin的内容。您必须将NSTask
对象的stdin连接到该文件。这样的事情应该有效:
NSTask *task = [[NSTask alloc] init];
NSFileHandle *stdin = [NSFileHandle fileHandleForReadingAtPath:@"/Users/shared/s.txt"];
[task setLaunchPath:@"/usr/local/bin/C_command"];
[task setCurrentDirectoryPath:@"/Users/Shared"];
[task setStandardInput:stdin];