進(jìn)程運行時不斷打印子流程輸出為了從我的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)所以當(dāng)我啟動一個進(jìn)程Process.execute("mvn clean install"),我的程序等待進(jìn)程完成,只有這樣,我才能得到程序的完整輸出。如果我正在運行一個需要一段時間才能完成的進(jìn)程,這是很煩人的。我能讓我的程序逐行地寫進(jìn)程輸出,在流程輸出完成之前輪詢它嗎?*[編輯]對不起,在發(fā)布這個問題之前,我搜索得不太好。線程實際上是關(guān)鍵。在這里找到一個例子,說明如何做到這一點:*從線程打開
3 回答

largeQ
TA貢獻(xiàn)2039條經(jīng)驗 獲得超8個贊
lines = iter(fd.readline, "")
from __future__ import print_function # Only Python 2.ximport subprocessdef 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)# Examplefor path in execute(["locate", "a"]): print(path, end="")

慕少森
TA貢獻(xiàn)2019條經(jīng)驗 獲得超9個贊
def execute(command): process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) # Poll process for new output until finished while True: nextline = process.stdout.readline() if nextline == '' and process.poll() is not None: break sys.stdout.write(nextline) sys.stdout.flush() output = process.communicate()[0] exitCode = process.returncode if (exitCode == 0): return output else: raise ProcessException(command, exitCode, output)

慕虎7371278
TA貢獻(xiàn)1802條經(jīng)驗 獲得超4個贊
from subprocess import Popen, PIPE, CalledProcessErrorwith Popen(cmd, stdout=PIPE, bufsize=1, universal_newlines=True) as p: for line in p.stdout: print(line, end='') # process line hereif p.returncode != 0: raise CalledProcessError(p.returncode, p.args)
p.poll()
iter(p.stdout.readline, '')
添加回答
舉報
0/150
提交
取消