簡體   English   中英

如何在使用超時時從 python 的 subprocess.run 中捕獲錯誤

[英]how to capture error from python's subprocess.run, while using timeout

我不知道如何使用 python 的 subprocess.run 來捕獲 stdout、stderr 和 exitcode ......以及其他任何可以捕獲的東西。 我還必須使用超時選項,因為我正在運行的數千個命令中的一些命令會掛起,即無休止地運行。 我敢打賭我錯過了一些明顯的東西,我道歉。 我已經花了幾天的時間,無法弄清楚。

您能給我的任何幫助將不勝感激。

這是我有缺陷的代碼:

seconds = timeout
try:
    proc = subprocess.run(cmd, capture_output=True, timeout=seconds)

except subprocess.TimeoutExpired:
    print('This process ran too long:\n' + cmd + '\n')
        
out, err = proc.communicate()
exitcode = proc.returncode

if len(out) == 0: out="''"
if len(err) == 0: err="''"
#
return exitcode, out, err

您快到了。 代替

out, err = proc.communicate()

out, err = proc.stdout, proc.stderr

關於您的 except 子句,我不確定您是否能夠在超時后獲得 stdout、stderr 和 returncode。 給它一個檢查。 如果沒有,那么請考慮在您的 except 子句中使用return "", "", 1或類似的內容。

暫無
暫無

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

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