subprocess如何設置命令超時時間


一、subprocess如何設置命令超時時間

最近遇到一個問題,就是我需要在服務器上執行某些shell命令,但是有些命令失敗的時候是不會自動終止的,只會一直停在那里,很耗時間。

因此想到了設置超時時間,而 subprocess 模塊是沒有超時功能的。至於為什么不用其他模塊執行shell命令,因為subprocess比較安全。

 

這時我一開始想到的是使用 multiprocessing.Process 進程的守護進程去實現的,但是發現還是很low而且實現不好。

后面就突然想到了定時器,線程模塊有,於是:

import subprocess
from threading import Timer


def kill_command(p):
    """終止命令的函數"""
    p.kill()


def execute(command, timeout):
    # 執行shell命令
    p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    # 設置定時器去終止這個命令
    timer = Timer(timeout, kill_command, [p])

    try:
        timer.start()
        stdout, stderr = p.communicate()
        return_code = p.returncode
        print(return_code)
        print(stdout)
        print(stdout)
    except Exception as ex:
        print(ex)
    finally:
        timer.cancel()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM