Python調用系統命令設置超時時間

    python經過subprocess模塊調用系統命令。實際使用中,有一次是命令進入了交互模式,結果web端直接卡死了。調用時設置一個超時時間,時間用完後自動斷開。這樣就避免了系統由於調用命令而僵死的問題。python

def sys_command_outstatuserr(cmd, timeout=120):
    p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)
    t_beginning = time.time()
    seconds_passed = 0
    while True:
        if p.poll() is not None:
            res = p.communicate()
            exitcode = p.poll() if p.poll() else 0
            return res[0], exitcode, res[1]
        seconds_passed = time.time() - t_beginning
        if timeout and seconds_passed > timeout:
            p.terminate()
            out, exitcode, err = '', 128, '執行系統命令超時'
            return out, exitcode, err
        time.sleep(0.1)

def sys_command_outstatuserr(cmd, timeout=120):web

    p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)shell

    t_beginning = time.time()ide

    seconds_passed = 0spa

    while True:code

        if p.poll() is not None:cmd

            res = p.communicate()it

            exitcode = p.poll() if p.poll() else 0class

            return res[0], exitcode, res[1]sed

        seconds_passed = time.time() - t_beginning

        if timeout and seconds_passed > timeout:

            p.terminate()

            out, exitcode, err = '', 128, '執行系統命令超時'

            return out, exitcode, err

        time.sleep(0.1)

def sys_command_outstatuserr(cmd, timeout=120):

    p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)

    t_beginning = time.time()

    seconds_passed = 0

    while True:

        if p.poll() is not None:

            res = p.communicate()

            exitcode = p.poll() if p.poll() else 0

            return res[0], exitcode, res[1]

        seconds_passed = time.time() - t_beginning

        if timeout and seconds_passed > timeout:

            p.terminate()

            out, exitcode, err = '', 128, '執行系統命令超時'

            return out, exitcode, err

        time.sleep(0.1)

相關文章
相關標籤/搜索