我正在逐步推进perl学习曲线(感谢这个真正有用的网站的贡献者),但我正在努力解决这个问题。
我正在构建一个使用三个(c ++)第三方程序的perl实用程序。通常这些运行:A $ file_list | B -args | C $ file_out
其中进程A读取多个文件,进程B修改每个单独的文件,进程C收集管道中的所有输入文件并生成一个输出文件,其中一个空输入文件表示输入流的结束。
输入文件很大(ish)大约100Mb,大约10。这些进程是CPU密集型的,整个过程需要每天应用于数千个文件组,因此将中间文件读写到磁盘的简单解决方案效率太低。此外,上述过程只是处理序列的一部分,其中输入文件已经在内存中,输出文件也需要在内存中进行进一步处理。
有许多解决方案已经有详细记录,我有一个使用IPC :: Open3()的原型版本。到现在为止还挺好。 :)
然而 - 当通过进程B将每个文件传递给进程A 时,我需要为进程B修改每个输入文件中的参数,而不会中断进程C的正向流程。这是我无法阻止的地方我正在寻找一些建议。
作为进一步的背景:
我对缺乏“迄今为止的代码”感到抱歉,但我认为问题更多的是“我该如何解决这个问题?”而不是“我如何让我的代码工作?”。
非常感谢任何指针或帮助。
答案 0 :(得分:2)
你需要第四个程序(称之为D)来确定B的参数应该是什么,并用这些参数执行B并且将D的stdin和stdout连接到B的stdin和stdout。然后,您可以在管道中用D替换B.
您使用D语言取决于您。
答案 1 :(得分:2)
如果您希望将不同程序的输出提供给管道,我建议您要查看的内容是......好吧,pipe
。
这可以让你设置一个管道 - 它与你从IPC::Open3
获得的管道非常相似,但可以更好地控制你读/写的内容。