python子进程communication()块

Min*_*ngo 15 python subprocess blocking

我正在使用进程模块调用外部程序(plink.exe)来登录服务器; 但是当我呼叫通信来读取输出时,它就是阻塞.代码如下:

 import subprocess
 process = subprocess.Popen('plink.exe hello@10.120.139.170 -pw 123456'.split(), shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 print process.communicate() #block here
Run Code Online (Sandbox Code Playgroud)

我知道该块是因为plink.exe它仍在运行; 但我需要在子进程终止之前读取输出.反正有吗?

Tho*_*ers 28

communicate方法的整个目的是等待进程完成并返回所有输出.如果您不想等,请不要打电话communicate.而是从stdoutstderr属性读取以读取输出.

如果进程输出到两者stdout并且stderr(并且您想要单独读取它),则必须小心实际读取两者而不阻塞,否则您可能会死锁.这在Windows上相当困难,您可能希望使用该pexpect模块.