簡體   English   中英

從subprocess.Popen異步讀取stdout

[英]Asynchronously read stdout from subprocess.Popen

我正在使用subprocess.popen運行子程序。 當我從命令窗口(cmd.exe)啟動我的Python程序時,程序會隨着程序的發展在窗口中寫入一些信息和日期。

當我不在命令窗口中運行我的Python代碼時,它會為這個子程序的輸出打開一個新的命令窗口,我想避免這種情況。 當我使用以下代碼時,它不會顯示cmd窗口,但它也不會打印狀態:

p = subprocess.Popen("c:/flow/flow.exe", shell=True, stdout=subprocess.PIPE)
print p.stdout.read()

如何在程序輸出中顯示子程序的輸出?

用這個:

cmd = subprocess.Popen(["c:/flow/flow.exe"], stdout=subprocess.PIPE)
for line in cmd.stdout:
    print line.rstrip("\n")
cmd.wait()  # you may already be handling this in your current code

請注意,您仍然需要等待子程序刷新其stdout緩沖區(在不寫入終端窗口時通常以不同方式緩沖),因此當子程序打印時,您可能無法立即看到每一行(這取決於各種OS細節和子程序的細節)。

還要注意我是如何刪除shell = True並用列表替換字符串參數,這通常是推薦的。

尋找一個異步處理Popen數據的方法我偶然發現了http://code.activestate.com/recipes/576759-subprocess-with-async-io-pipes-class/

這看起來很有希望,但我得到的印象是可能存在一些拼寫錯誤。 尚未嘗試過。

這是一個老帖子,但是很難找到解決方案的常見問題。 試試這個: http//code.activestate.com/recipes/440554-module-to-allow-asynchronous-subprocess-use-on-win/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM