要从我的 Python 脚本启动程序,我使用以下方法:
def execute(command): process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output = process.communicate()[0] exitCode = process.returncode if (exitCode == 0): return output else: raise ProcessException(command, exitCode, output)
因此,当我启动类似的进程时Process.execute("mvn clean install"),我的程序会等到进程完成,然后我才能获得程序的完整输出。如果我正在运行一个需要一段时间才能完成的进程,这很烦人。
Process.execute("mvn clean install")
我可以让我的程序通过在循环完成之前轮询进程输出来逐行编写进程输出吗?
一旦命令输出它们,您就可以使用iterlines = iter(fd.readline, "")来处理它们: . 这是一个显示典型用例的完整示例(感谢@jfs 的帮助):
lines = iter(fd.readline, "")
from __future__ import print_function # Only Python 2.x import subprocess def execute(cmd): popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True) for stdout_line in iter(popen.stdout.readline, ""): yield stdout_line popen.stdout.close() return_code = popen.wait() if return_code: raise subprocess.CalledProcessError(return_code, cmd) # Example for path in execute(["locate", "a"]): print(path, end="")