我需要使用管道和重定向编写一个执行多个子程序的程序。因此,由于我需要使用一些数据结构和函数,因此我想避免使用 Bash。到目前为止,我知道如何在 bash 中使用重定向没有任何问题。
$ ./myprogram -f 1 -h -l < mysource.dat | myprogram2
我的一些问题是下一个:
您如何使用其他语言(如 C、Python、Perl、Java 或 Ruby)编写此行代码,避免使用系统(“....”)?
另外,我想知道哪种语言提供了最好的流程管理工具?
我需要使用管道和重定向编写一个执行多个子程序的程序。因此,由于我需要使用一些数据结构和函数,因此我想避免使用 Bash。到目前为止,我知道如何在 bash 中使用重定向没有任何问题。
$ ./myprogram -f 1 -h -l < mysource.dat | myprogram2
我的一些问题是下一个:
您如何使用其他语言(如 C、Python、Perl、Java 或 Ruby)编写此行代码,避免使用系统(“....”)?
另外,我想知道哪种语言提供了最好的流程管理工具?
用 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 将允许您使用pipe
、fork
、dup2
和exec
系统调用来做所有事情,但需要更多的输入。其他的很可能同样好,具体取决于您的个人脚本偏好。