Сценарий
My python выполняет файл .bat f ie, который, в свою очередь, запускает программу Microsoft (MS) Access. Приложение MS Access заполняет БД, а затем завершает работу. Иногда Access не удается из-за поврежденной БД или из-за проблем, которые могут привести к зависанию. Я хочу избежать этого и убить процесс, если он работает дольше, чем несколько секунд переменной. Тестируя мой сценарий, я установил время ожидания = 5 (секунд) для процесса, который занимает не менее 10 секунд. Когда тайм-аут срабатывает, он ждет. Он не убивает процесс, а вместо этого ожидает завершения процесса MS Access (согласно subprocess.run python docs). Как я могу убить приложение MS Access. Код работает, как и ожидалось, для файлов bat, которые не вызывают Access.
if( args.verbose ):
print( "Starting timer for " + str( alarmTime ) + " mintues" )
try:
proc = subprocess.run( [ batchFile ],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
universal_newlines=True,
shell=False,
check=True,
timeout=5 )
except subprocess.TimeoutExpired:
if( args.verbose ):
print ( "FAIL: Ran batch: ", batchFile, " and it timed out!" )
if( args.email ):
email( "FAIL: A batch script process is running longer than 15 minutes\nSomething is wrong\nquitting", mailTo )
returnStatus = returnStatus + " The following batch job timed out: " + batchFile + "\n"
dependancy[ batchFile ][ 1 ] = None
continue
dependancy[ batchFile ][ 1 ] = RunStatus( True, ( True if proc.returncode == 0 else False ) )
if( proc.returncode != 0 ):
returnStatus = returnStatus + " The following batch job failed: " + batchFile + "\n"