第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

進(jìn)程運行時不斷打印子流程輸出

進(jìn)程運行時不斷打印子流程輸出

三國紛爭 2019-07-11 15:19:28
進(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個贊

你可以用ITER若要在命令輸出行時立即處理這些行,請執(zhí)行以下操作:lines = iter(fd.readline, "")..下面是一個完整的示例,展示了一個典型的用例(感謝@JFS幫助):

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="")


查看完整回答
反對 回復(fù) 2019-07-11
?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗 獲得超9個贊

好的,我設(shè)法在沒有線程的情況下解決了這個問題(如果建議使用線程會更好),可以使用這個問題中的一個片段。在子進(jìn)程運行時攔截子進(jìn)程的stdout

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)


查看完整回答
反對 回復(fù) 2019-07-11
?
慕虎7371278

TA貢獻(xiàn)1802條經(jīng)驗 獲得超4個贊

在Python 3中刷新其標(biāo)準(zhǔn)輸出緩沖區(qū)后,立即逐行打印子進(jìn)程的輸出:

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()-當(dāng)?shù)竭_(dá)eof時,循環(huán)結(jié)束。你不需要iter(p.stdout.readline, '')-在Python 3中修復(fù)了預(yù)讀錯誤.

也看,Python:從子流程讀取流輸入。Communications().


查看完整回答
反對 回復(fù) 2019-07-11
  • 3 回答
  • 0 關(guān)注
  • 615 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號