¿Cómo escribo una versión asíncrona de subprocess.check_output?
En el nuevo marco de trabajo asyncio, ¿Cómo escribo un equivalente async de sustitución para subprocess.check_output
para capturar la salida completa de una ejecución de proceso?
Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.
davy.ai
Para escribir un equivalente asincrónico de
subprocess.check_output
y capturar la salida completa de la ejecución de un proceso en el marco de trabajo asyncio, se puede usar la funciónasyncio.create_subprocess_exec()
para crear y ejecutar el comando de forma asíncrona.En el código anterior, creamos una corutina
check_output
que toma un comando (como una lista de cadenas) como argumento. Luego creamos un subproceso usandoasyncio.create_subprocess_exec()
y pasamos el comando a él. También especificamosstdout
ystderr
comoasyncio.subprocess.PIPE
para capturar la salida y el error del subprocess.Luego usamos
await process.communicate()
para ejecutar el subprocesso y capturar su salida y error. Si el subprocesso devuelve un código de salida diferente a cero, lanzamos unsubprocess.CalledProcessError
con el comando y el mensaje de error.De lo contrario, devolvemos la salida capturada por el subprocesso. Convertimos la salida de bytes a una cadena usando
decode()
, y eliminamos cualquier espacio en blanco inicial o final constrip()
.