Така че имам скрипт на Python, който изпълнява цикъл, в който извиква програма A чрез подпроцес. Popen изчаква нейния изход, след това запазва изхода и след това го извиква отново и т.н. (Това продължава да се случва за редица изпълнения, които съм задал като вход)
Работата е там, че имам таймер, така че когато програмата A отнеме повече от определен threshold_time, скриптът убива процеса с 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 за обратната връзка!
subprocess.Popen("runas /user:Admin cmd.exe")
вероятно ще предизвика същото изключение, ако предоставите паролата, преди скриптът да се опита да я убие. - person robots.jpg   schedule 02.06.2011