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 ]
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 ]