我试图从Python调用命令行实用程序。代码如下
import subprocess
import sys
class Executor :
def executeEXE(self,executable ) :
CREATE_NO_WINDOW = 0x08000000
process = subprocess.Popen(executable, stdout=subprocess.PIPE,
creationflags=CREATE_NO_WINDOW )
while True:
line = process.stdout.readline()
if line == '' and process.poll() != None:
break
print line
上面代码的问题是我想要上面的过程的实时输出,我没有得到。我在这里做错了什么。
答案 0 :(得分:1)
您的代码中存在两个问题:
首先,当打印出新行并刷新时,readline()将被阻止。
这意味着你应该执行代码
正确:
......
在一个新的Thread中,并在输出就绪时调用一个回调函数。
由于readline正在等待新行,您必须使用
打印'Hello World' sys.stdout.flush()
每次都在您的可执行文件中。
你可以在我的git上看到一些代码和示例:
pyCommunicator
相反,如果您的外部工具是缓冲的,您唯一可以尝试的是使用stderr作为PIPE: https://stackoverflow.com/a/11902799/2054758