Python subprocess.Popen 未加入

Python subprocess.Popen without joining

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() 不阻塞?即只是 运行 命令并继续

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


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

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