要从 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")
,我的程序会等到该过程完成,然后我才能获得程序的完整输出。如果我正在运行一个需要一段时间才能完成的进程,这很烦人。
我可以让我的程序通过在循环或其他方式完成之前轮询进程输出来逐行写入进程输出吗?
I found this可能相关的文章。
您可以使用iter命令输出后立即处理行:lines = iter(fd.readline, "")
。这是一个显示典型用例的完整示例(感谢@jfs 的帮助):
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="")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)