我具有被先導雖然標準輸入並提供輸出到stdoutPython的子&標準輸出 - 程序死鎖
否則用於在QProcess中運行它C++/Qt的程序的模擬程序效果很好。
做一個的Python程序下Linux上運行它效果很好,使用:
p = subprocess.Popen(cmd,stdin=subprocess.PIPE,stdout=subprocess.PIPE)
而且使用p.stdin.write
,p.stdout.readline
,並p.wait
然而,下windows,程序運行並通過stdin獲取命令(這已通過調試子進程進行了驗證),但python程序在任何p.stdout.readline
和p.wait
處都出現死鎖。如果stdout=subprocess.PIPE
參數被刪除,程序將運行,輸出將顯示在控制檯上,並且不會發生死鎖。
這聽起來熟悉從Python文檔的警告:
警告:這將使用標準輸出=管和/或標準錯誤= PIPE並且當死鎖子進程產生足夠的輸出到管道 這樣它就會阻止等待OS管道緩衝區接受更多的 數據。使用通信()來避免這種情況。
但是,我不能使用通信(),因爲程序協議不是單個命令和單個輸出,而是需要多個命令和答覆。
有沒有解決方法?
您是否嘗試過使用'bufsize'增加緩衝區?它可能有幫助 – Vinny