【问题标题】:Will the PIPE block the parent process? [duplicate]PIPE会阻塞父进程吗? [重复]
【发布时间】:2017-01-22 18:07:26
【问题描述】:

我有一个这样的 python 模块:

from subprocess import *

cmdline = 'python example.py'

result = Popen(cmdline,shell=False,stdout=PIPE,stderr=PIPE,stdin=PIPE).stdout

我希望父进程阻塞,直到子进程完成执行并且父进程可以接收到子进程的输出。上面的代码能满足我的目的吗?在我的理解中,子进程会将其输出发送到 PIPE 而不是 STDOUT,并且父进程会阻塞,直到子进程退出并且 PIPE 关闭。谁能解释我在哪里被误解了?

另外一个是要么communicate,要么check_output返回一个字节串,但是我想逐行处理结果,有没有好的办法呢?

【问题讨论】:

    标签: python subprocess multiprocessing


    【解决方案1】:

    不,您所做的是创建一个名为 resultPopen 对象。您需要致电result.wait(),或者最好致电result.communicate()。更多关于这个Here

    【讨论】:

      【解决方案2】:

      而不是做

      result = Popen(cmdline,shell=False,stdout=PIPE,stderr=PIPE,stdin=PIPE).stdout`
      

      你应该这样做:

       stdout, stderr = Popen(cmdline,shell=False,stdout=PIPE,stderr=PIPE,stdin=PIPE).communicate()
      

      stdout 是您希望的resultstderr 是进程写入错误输出的位置。

      【讨论】:

      • 那里一个.check_output()调用,它返回一个命令的输出并等待它返回,你现在知道了。
      • check_output() 返回一个字节串,但是我想逐行处理结果,有没有好的方法呢? @Wayne Werner
      • @ascetic652 你的意思是除了.decode().split('\n')吗?
      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多