example español python subprocess

example - subprocess python español



¿Hay alguna forma de verificar si un subproceso todavía se está ejecutando? (3)

Pregunta : ... una forma de verificar si un proceso todavía se está ejecutando ...

Puedes hacerlo por ejemplo:

p = subprocess.Popen(... """ A None value indicates that the process hasn''t terminated yet. """ poll = p.poll() if poll == None: # p.subprocess is alive

Python »3.6.1 Documentación de objetos popen

Probado con Python: 3.4.2

Estoy lanzando varios subprocesos con subproceso. Abrir en Python. Me gustaría comprobar si uno de esos procesos se ha completado. He encontrado dos formas de verificar el estado de un subproceso, pero ambas parecen forzar el proceso para completarse. Una es usar process.communicate () e imprimir el código de retorno, como se explica here . Otra es simplemente llamar a process.wait () y comprobar que devuelve 0.

¿Hay alguna manera de verificar si un proceso todavía se está ejecutando sin esperar a que se complete si lo está?


Haciendo el

myProcessIsRunning = poll() is None

Como lo sugiere la respuesta principal, es la forma recomendada y la forma más sencilla de verificar si se está ejecutando un proceso. (y funciona en jython también)

Si no tiene la instancia de proceso en la mano para comprobarlo. Luego use los procesos del sistema operativo TaskList / Ps.

En Windows, mi comando se verá de la siguiente manera:

filterByPid = "PID eq %s" % pid pidStr = str(pid) commandArguments = [''cmd'', ''/c'', "tasklist", "/FI", filterByPid, "|", "findstr", pidStr ]

Esto es esencialmente hacer lo mismo que la siguiente línea de comando:

cmd /c "tasklist /FI "PID eq 55588" | findstr 55588"

Y en Linux, hago exactamente lo mismo usando:

pidStr = str(pid) commandArguments = [''ps'', ''-p'', pidStr ]

El comando ps ya devolverá el código de error 0/1 dependiendo de si se encuentra el proceso. Mientras que en Windows necesita el comando encontrar cadena.

Este es el mismo enfoque que se analiza en el hilo de desbordamiento de pila siguiente:

Verifique si un proceso se está ejecutando usando su PID en JAVA

NOTA: Si utiliza este enfoque, recuerde que debe ajustar su llamada de comando en
try: foundRunningProcess = subprocess.check_output (ArgumentosArray, ** kwargs) devuelve Verdadero excepto Excepción como err: devuelve Falso

Tenga en cuenta que tenga cuidado si está desarrollando con VS Code y utilizando Python y Jython puros. En mi entorno, estaba bajo la ilusión de que el método de poll () no funcionaba porque se estaba ejecutando un proceso que sospechaba que debía haber terminado. Este proceso había lanzado Wildfly. Y después de que pedí que Wildfly se detuviera, el shell seguía esperando que el usuario "presione cualquier tecla para continuar ...".

Para finalizar este proceso, en Python puro, el siguiente código estaba funcionando:

process.stdin.write(os.linesep)

En jython, tuve que arreglar este código para tener el siguiente aspecto:

print >>process.stdin, os.linesep

Y con esta diferencia el proceso efectivamente terminó. Y el jython.poll () comenzó a decirme que el proceso ha terminado.


Podría usar subprocess.check_output para echar un vistazo a su salida.

Prueba este código:

import subprocess subprocess.check_output([''your command here''], shell=True, stderr=subprocess.STDOUT)

Espero que esto haya ayudado!