首頁 > 後端開發 > Python教學 > 使用Python的'subprocess”模組時如何實現逾時?

使用Python的'subprocess”模組時如何實現逾時?

Linda Hamilton
發布: 2024-12-17 17:57:11
原創
264 人瀏覽過

How Can I Implement Timeouts When Using Python's `subprocess` Module?

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)
登入後複製

其他注意事項

  • 當下列情況時,從子程序呼叫中刪除 shell=True 可能的。這將提高安全性和性能。
  • 超時行為可能會因平台和流程複雜性而異。有關更多詳細信息,請參閱子進程超時失敗文件。

以上是使用Python的'subprocess”模組時如何實現逾時?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板