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)