从python子进程获取实时输出

时间:2015-04-03 13:34:55

标签: python command-line subprocess

我试图从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

上面代码的问题是我想要上面的过程的实时输出,我没有得到。我在这里做错了什么。

1 个答案:

答案 0 :(得分:1)

您的代码中存在两个问题:

  1. 首先,当打印出新行并刷新时,readline()将被阻止。
    这意味着你应该执行代码

    正确:
        ......

  2. 在一个新的Thread中,并在输出就绪时调用一个回调函数。

    1. 由于readline正在等待新行,您必须使用

      打印'Hello World'  sys.stdout.flush()

    2. 每次都在您的可执行文件中。

      你可以在我的git上看到一些代码和示例:
      pyCommunicator

      相反,如果您的外部工具是缓冲的,您唯一可以尝试的是使用stderr作为PIPE: https://stackoverflow.com/a/11902799/2054758

相关问题