Visualización continua de salida durante la ejecución del proceso
En los scripts de Python, a menudo utilizamos subprocesos para ejecutar programas externos. Si bien esta es una capacidad poderosa, puede resultar frustrante esperar a que se complete un proceso antes de recuperar su resultado. Para abordar esto, exploremos un método para transmitir continuamente el resultado del proceso mientras se está ejecutando.
Tradicionalmente, usamos subprocess.communicate() para capturar el resultado completo de un proceso una vez que finaliza. Sin embargo, este enfoque requiere que el proceso se complete por completo antes de que se pueda mostrar cualquier resultado.
Para habilitar la salida continua, podemos aprovechar la función iter junto con fd.readline(). Esto nos permite iterar sobre el flujo de salida estándar del proceso, capturando líneas a medida que estén disponibles:
import subprocess
def execute(cmd):
popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
for stdout_line in iter(popen.stdout.readline, ""):
yield stdout_line
popen.stdout.close()
return_code = popen.wait()
if return_code:
raise subprocess.CalledProcessError(return_code, cmd)
En esta versión mejorada, generamos cada línea de salida estándar a medida que está disponible. Esto permite que el script muestre la salida continuamente a medida que la genera el proceso.
Aquí hay un ejemplo ilustrativo:
for path in execute(["locate", "a"]):
print(path, end="")
Utilizando este enfoque, podemos mostrar continuamente las rutas que coinciden con la consulta de búsqueda "a" tal como las encuentra el comando "locate", proporcionando información en tiempo real sobre el progreso del proceso.
Esta técnica permite el monitoreo continuo de la salida, mejorando la interactividad y la experiencia del usuario de los scripts que inician procesos externos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3