【问题标题】:How to concatenate the output of several processes into the input of another?如何将多个进程的输出连接到另一个进程的输入?
【发布时间】:2014-03-10 05:00:11
【问题描述】:

我正在编写一个脚本来执行一系列进程并将它们的所有输出连接到另一个进程的输入中。我已经将我的脚本压缩成一个测试用例,使用 echo 和 cat 作为实际流程的替代品。

#!/usr/bin/python

import os,subprocess

(pipeOut, pipeIn) = os.pipe()

catProcess = subprocess.Popen("/bin/cat", stdin = pipeOut)

for line in ["First line", "Last line"]:
    subprocess.call(["/bin/echo",line], stdout = pipeIn)

os.close(pipeIn)
os.close(pipeOut)

catProcess.wait()

程序按预期运行,除了对catProcess.wait() 的调用挂起(可能是因为它仍在等待更多输入)。将close_fds=True 传递给Popencall 似乎也无济于事。

有没有办法关闭catProcesses 的标准输入,让它优雅地退出?或者还有其他方法可以编写这个程序吗?

【问题讨论】:

    标签: python subprocess pipe popen


    【解决方案1】:

    close_fds=True 传递给catProcess 有助于我的系统。

    您不需要显式创建管道:

    #!/usr/bin/python
    from subprocess import Popen, PIPE, call
    
    cat = Popen("cat", stdin=PIPE)
    for line in ["First line", "Last line"]:
        call(["echo", line], stdout=cat.stdin)
    cat.communicate() # close stdin, wait
    

    【讨论】:

      猜你喜欢
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 2018-09-11
      • 2022-01-15
      • 2023-01-26
      • 2011-11-09
      • 1970-01-01
      相关资源
      最近更新 更多