[英]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.