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()
无阻塞?即只需运行命令并继续
答案 0 :(得分:3)
communicate()
阻止,因为它要求stdout和stderr作为字符串返回(并且还明确定义为等待终止)。只要远程进程在没有关闭这些管道的情况下运行,仍然可以有更多内容添加到这些字符串,因此无法返回它们。
消除communicate()
(和管道,因为如果从未读过它们就会填满并以这种方式导致阻塞):
processes = [ subprocess.Popen(['rsh', host, 'myscript']) for host in hosts ]