python опция тайм-аута subprocess.run () не может завершить работу приложения MS Access - PullRequest
0 голосов
/ 14 февраля 2020
Сценарий

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...