Python 的子進程模組和超時
子進程模組提供了一種便捷的方法來執行外部命令、捕獲其輸出並外部命令管理其生命週期。然而,預設情況下,它的communicate()方法不支援超時。這在執行長時間運行的命令時帶來了挑戰,可能會導致呼叫程序死鎖。
使用 check_output 實作逾時
Python 3.3 及更高版本提供 check_output() 作為比 Popen() 和communicate() 更有效的替代方案。此函數計算命令,將其 stdout 和 stderr 輸出合併為位元組字串,如果命令以非零狀態退出,則引發 CalledProcessError。至關重要的是,它還支援超時,允許您指定命令的最長執行時間。
from subprocess import STDOUT, check_output seconds = 10 # Timeout in seconds output = check_output(cmd, stderr=STDOUT, timeout=seconds)
在此範例中,check_output() 函數將執行 cmd 中指定的命令並等待其完成10秒內。如果指令花費的時間超過 10 秒,將引發 TimeoutExpired 錯誤。
在 Python 2.x 中使用 subprocess32 進行逾時
對於 Python 2.x, subprocess32 backport 提供與 Python 3.3 中的 check_output(put) 相同的功能。要安裝subprocess32,請使用pip:
pip install subprocess32
安裝後,您可以使用subprocess32 的call() 函數來執行帶超時的命令:
import subprocess32 seconds = 10 # Timeout in seconds subprocess32.call(cmd, timeout=seconds)
其他注意事項
以上是使用Python的'subprocess”模組時如何實現逾時?的詳細內容。更多資訊請關注PHP中文網其他相關文章!