我使用子流程模块调用外部程序(plink.exe)登录到服务器;但是当我调用communicate读取输出时,它被阻塞了。代码如下:
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
我知道块是因为plink.exe
它仍在运行;但是我需要在子进程终止之前读取输出。有什么办法吗?
可能是因为“plink.exe”需要接受输入参数,如果不传递它们,它将阻塞直到给出数据,您可以尝试在方法
communicate(input)
中添加参数communicate
方法的全部目的是等待进程完成并返回所有输出。如果您不想等待,请不要呼叫communicate
。相反,从stdout
或stderr
属性读取输出。如果进程同时输出到} 模块。
stdout
和stderr
(并且您希望单独读取它),则必须小心实际读取这两个进程而不阻塞,否则可能会死锁。这在Windows上相当困难,您可能希望改用^{我遇到了类似的情况,我必须执行一个命令
lmstat -a
,然后获取终端的输出。如果只需要运行一个命令,然后读取输出,可以使用以下代码:
相关问题 更多 >
编程相关推荐