gpt4 book ai didi

macos - 带有命令行输入重定向的 NSTask

转载 作者:行者123 更新时间:2023-12-03 17:02:18 24 4
gpt4 key购买 nike

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

我显然做错了一些事情并且错过了一些明显重要的事情,但无法弄清楚是什么。非常欢迎提示。谢谢!

最佳答案

输入重定向仅使用文件的内容而不是标准输入的内容。您必须将 NSTask 对象的标准输入连接到文件。像这样的东西应该有效:

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];

关于macos - 带有命令行输入重定向的 NSTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29171321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com