具有命令行输入重定向的NSTask



我正在学习如何编写NSTask,以便任务进程可以接受输入文件重定向作为参数。在传统的unixsystem()命令中,这对代码来说是微不足道的,但对于我的应用程序的需求来说,它还远远不够可控。我试图理解的例子是哪个参数属于其中。这是完整的命令,将键入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];

我显然做错了什么,错过了一些明显重要的事情,但我不知道是什么。一个提示是非常受欢迎的。谢谢

输入重定向只使用文件的内容,而不是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];

最新更新