Python subprocess.Popen没有加入

时间:2016-01-08 18:57:21

标签: python subprocess

for host in hosts:
    cmd = ['rsh', host, 'myscript']
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    stdout, stderr = p.communicate()

目前上面挂起stdout, stderr = p.communicate(),因为myscript 永远地跑。

如何才能使p.communicate()无阻塞?即只需运行命令并继续

1 个答案:

答案 0 :(得分:3)

communicate() 阻止,因为它要求stdout和stderr作为字符串返回(并且还明确定义为等待终止)。只要远程进程在没有关闭这些管道的情况下运行,仍然可以有更多内容添加到这些字符串,因此无法返回它们。

消除communicate()(和管道,因为如果从未读过它们就会填满并以这种方式导致阻塞):

processes = [ subprocess.Popen(['rsh', host, 'myscript']) for host in hosts ]