Tengo un script de python que ejecuta un ciclo en el que llama un programa A a través de un subproceso. Popen espera su salida, luego guarda el salida y luego lo llama de nuevo y así sucesivamente. (Esto sigue sucediendo durante varias ejecuciones que establecí como entrada)WindowsError: [Error 5] Acceso denegado al intentar eliminar un subproceso (python)
Lo que pasa es que tengo un temporizador para que cada vez que el programa A tome más de un threshold_time en particular, la secuencia de comandos mate el proceso con process.kill () y pasa a la siguiente iteración.
El problema es que a pesar de que todo parece funcionar bien, incluso durante 300 carreras, a veces me sale este error:
File "C:\Python27\lib\subprocess.py", line 1002, in terminate
_subprocess.TerminateProcess(self._handle, 1)
WindowsError: [Error 5] Access is denied
y luego muere el guión.
La parte de la escritura se hace referencia:
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
¿Tiene alguna sugerencia lo que podría ser el problema?
EDIT: Respondió la respuesta y corrigió el código. ¡Gracias @jedislight por tus comentarios!
¿Se puede publicar la secuencia de comandos de Python más pequeña que pueda reproducir este comportamiento? –
@Sridhar Agregué el código que solicitó. – Galois
Lo intenté con "SOME.CMD" siendo solo "cmd" y funcionó. ¿Cuál es tu proceso que estás tratando de matar? – Fenikso