Итак, у меня есть скрипт python, который запускает цикл, в котором он вызывает программу A через подпроцесс. Popen ждет своего вывода, затем сохраняет вывод, а затем снова вызывает его и так далее. (Это происходит в течение нескольких прогонов, которые я установил в качестве входных данных)
Дело в том, что у меня есть таймер, так что всякий раз, когда программа А занимает больше определенного порога_времени, скрипт убивает процесс с помощью 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
У вас есть предложения, в чем может быть проблема?
EDIT: Принят ответ и исправлен код. Спасибо @jedislight за ваш отзыв!
subprocess.Popen("runas /user:Admin cmd.exe")
, вероятно, вызовет такое же исключение, если вы предоставите пароль до того, как скрипт попытается его убить. - person robots.jpg   schedule 02.06.2011