簡體   English   中英

Python子流程包不報告子流程錯誤?

[英]Python subprocess package does not report errors from subprocess?

在某些機器上,用於以下代碼

p = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.STDOUT);
out, err = p.communicate()

該腳本將僅掛在p.communicate() ,並且不會返回。

手動運行命令后,我終於看到錯誤消息。

為什么會這樣,我應該如何解決呢?

謝謝。

嘗試stderr = subprocess.PIPE不是stderr = subprocess.STDOUT

我猜你的程序永遠不會結束?

當您調用communication()時,它將在不同的操作系統下執行不同的操作。 但是它總是等待啟動的進程自己退出,例如。 調用p.wait()。 p.wait()僅在進程終止時終止。

解決方案:

  • 您可以復制subprocess.Popen._communicate的源代碼並對其進行更改,以便它不使用wait(),而是使用time.sleep和一些超時
  • 您編寫了自己的代碼,該代碼讀取stdout和stderr,並且在程序輸出太多stderr時停止
  • 您可以通過這種方式更改文件的main()函數

方式

def main():
    ## here is you program code

if __name__ == '__main__':
    import thread, sys, time
    _id = thread.start_new(main, ())
    time.sleep(1)
    t = time.time() + 100 # execute maximum 100 + 1 seconds
    while t > time.time() and _id in sys._current_frames():
        time.sleep(0.001)

如果要查看子流程的源,可以在subprocess.__file__找到它。

暫無
暫無

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

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