0

我需要使用管道和重定向编写一个执行多个子程序的程序。因此,由于我需要使用一些数据结构和函数,因此我想避免使用 Bash。到目前为止,我知道如何在 bash 中使用重定向没有任何问题。

$ ./myprogram -f 1 -h -l < mysource.dat | myprogram2

我的一些问题是下一个:

  1. 您如何使用其他语言(如 C、Python、Perl、Java 或 Ruby)编写此行代码,避免使用系统(“....”)?

  2. 另外,我想知道哪种语言提供了最好的流程管理工具?

4

1 回答 1

1

用 Python 回答问题 1:

from subprocess import Popen, PIPE
f=file("mysource.dat")
p1 = Popen(["./myprogram","-f","1","-h"."-l"], stdin=f, stdout=PIPE)
f.close()
p2 = Popen(["myprogram2"], stdin=p1.stdout)
p1.stdout.close()
p1.wait()
p2.wait()

子流程模块文档中的更多信息。

关于问题 2,Java 可能不是最佳选择。C 将允许您使用pipeforkdup2exec系统调用来做所有事情,但需要更多的输入。其他的很可能同样好,具体取决于您的个人脚本偏好。

于 2013-05-31T09:35:09.600 回答