У меня похожая проблема с пакетом librosa / audioread при попытке прочитать файл mp3. Но, к сожалению, трюк-трик у меня не работает

у меня есть скрипт на python, который запускает цикл, в котором он вызывает программу A через подпроцесс. Popen ожидает его вывода, затем сохраняет вывод, а затем вызывает его снова и так далее. (Это продолжает происходить в течение ряда прогонов, которые я установил в качестве входных данных)

Дело в том, что у меня есть таймер, поэтому, когда программа A занимает больше определенного порогового времени, сценарий убивает процесс с помощью process.kill () и переходит к следующей итерации.

Проблема в том, что даже если кажется, что все работает нормально даже для 300 запусков, иногда я получаю эту ошибку:

    File "C:\Python27\lib\subprocess.py", line 1002, in terminate
    _subprocess.TerminateProcess(self._handle, 1)
    WindowsError: [Error 5] Access is denied

и тогда сценарий умирает.

Упомянутая часть скрипта:

timeout = TIME_CONST
for run in runs:
    killed = False
    start = time.clock()
    p = subprocess.Popen("SOME.CMD", cwd=r"some_dir") 
    # Monitor process. If it hits threshold, kill it and go to the next run
    while p.poll() is None:
        time.sleep(20) 
        secs_passed = time.clock() - start

        ### the following was my initial buggy line ###
        #if secs_passed >= timeout: 

        ### corrected line after jedislight's answer ###
        #if the time is over the threshold and process is still running, kill it
        if secs_passed >= timeout and p.poll is None: 
            p.kill()
            killed = True  
            break
    if killed: continue   

У вас есть предложения, в чем может быть проблема?

РЕДАКТИРОВАТЬ: Принял ответ и исправил код. Спасибо @jedislight за отзыв!

Ответы на вопрос(1)

Ваш ответ на вопрос