杀死Python脚本中不响应exe文件

时间:2015-04-02 17:47:29

标签: python windows crash subprocess exe

我在Python中运行一种敏感的.exe文件来接收一些数据测量。文件应该打开,进行测量,然后关闭。问题有时会崩溃,我需要能够在很长一段时间内每10分钟进行一次这些测量。

我需要的是检查'看看.exe是否没有响应,如果没有响应,那么让它杀死进程。或者在每次测量后杀死整个脚本。问题是当脚本尝试运行没有响应的.exe文件时,脚本会卡住。

这是脚本:

FNULL = open(os.devnull, 'a')   

filename = "current_pressure.log"

command = '"*SRH#\r"'

args = "httpget -r -o " + filename  + " -C 2 -S " + command + IP 

subprocess.call(args, stdout=FNULL, stderr=FNULL, shell=False)

基本上,需要像:

"if httpget.exe not responding, then kill process" 

OR

"kill above script if running after longer than 20 seconds"

2 个答案:

答案 0 :(得分:0)

如果进程持续太长时间,请使用计时器终止进程。在这里,我有两个定时器可以进行优雅和坚硬的终止,但如果你愿意的话,你可以直接杀人。

import threading

FNULL = open(os.devnull, 'a')   
filename = "current_pressure.log"
command = '"*SRH#\r"'
args = "httpget -r -o " + filename  + " -C 2 -S " + command + IP 

proc = subprocess.Popen(args, stdout=FNULL, stderr=FNULL, shell=False)

nice = threading.Timer(20, proc.terminate)
nice.start()
mean = threading.Timer(22, proc.kill)
mean.start()
proc.wait()
nice.cancel()
mean.cancel()

答案 1 :(得分:0)

通常,当程序在Windows上工作时挂起时,我们会尝试转到任务管理器并结束该特定程序的进程。当这种方法失败时,我们会尝试使用某些第三方软件来终止它。但是,还有另一种更好的方法可以自动终止这种被挂起的程序

http://www.problogbooster.com/2010/01/automatically-kills-non-responding.html