簡體   English   中英

timeout 命令不適用於 python 和 Popen

[英]timeout command is not working with python along with Popen

可以請一些指導,為什么命令沒有超時。 下面是我的 Python 代碼

python
>>>from subprocess import Popen, PIPE
>>>command="timeout 5 su - user -c \"user admin display_states\""
>>>print command
timeout 5 su - user "user admin display_states"
>>>process=Popen(command, stdout=PIPE, stderr=PIPE, shell=TRUE)
>>>(output,error)=process.communicate()
(Doesn't terminate after 5 seconds)

在 cmd 提示符上執行:

Linux>timeout 5 su - user -c "user admin display_states"
Session terminated, killing shell... ...killed.

我希望超時命令在 5 秒后終止,這在我的 Python 代碼中沒有發生。

Python 無法控制timeout命令。 據推測,子進程已經緩沖了更多的 output 比您在超時時能夠消耗的多,因此看起來它仍在運行,盡管實際上並非如此。

不過,在這種情況下,解決方法很簡單; 改用 Python 的超時。

process = subprocess.run(["su", "-", "user", "-c", "user admin display_states"], timeout=5, text=True, capture_output=True)
# output, error = process.stdout, process.stderr

對於它可以處理的情況,您通常應該更喜歡subprocess.run而不是裸Popen ,但如果您確實需要,還有一個用於Popencommunicate方法的timeout參數。

切線地,還要注意我們如何通過將命令作為列表傳遞來避免shell=True 通常想要。

暫無
暫無

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

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