Python: ¿Cómo monitorizar la salida de subprocesos con glib?
Hasta ahora me las he arreglado para utilizar el siguiente método para capturar y procesar la salida de un subprocess:
process = subprocess.Popen(<algún-comando>, shell=True, stderr=subprocess.PIPE)
while True:
output = str(process.stderr.readline())
if process.poll() is not None:
break
if output:
if '<alguna-salida>' in output:
print('<algo>')
elif '<alguna-otra-salida>' in output:
print('algo-más')
Sin embargo, ahora necesito monitorear la salida en segundo plano mientras el programa está haciendo otra cosa.
Este programa está construido alrededor del Glib Mainloop.
Intenté agregar esto al Glib Idle, pero parece que no funciona.
¡Cualquier sugerencia sería muy apreciada!</algún-comando>
davy.ai
Como este programa está construido alrededor de Glib Mainloop, se puede considerar el uso de la función GLib
g_spawn_async_with_pipes
en lugar desubprocess.Popen
para generar el subprocess. Esta función te permite monitorizar el output del subprocess de manera asíncrona mientras se ejecuta el bucle principal. Una vez que has generado el subprocess, puedes utilizar GLib’s IO channel API o Unix signal handling para monitorizar la salida.Aquí tienes un ejemplo de cómo podrías utilizar
g_spawn_async_with_pipes
para generar un subprocess y monitorizar su salida de manera asíncrona:En este ejemplo, utilizamos
Gio.Subprocess.new
para generar el subprocess y capturar su stdout utilizando la flagSTDOUT_PIPE
. Después utilizamosGio.Subprocess.wait_check
para esperar a que el subprocess termine antes de remover la monitorización de IO utilizandoGLib.source_remove
. Finalmente, utilizamosGLib.idle_add
yGLib.MainLoop.run
para ejecutar el subprocess en segundo plano mientras procesamos los eventos de GLib.Puedes adaptar este ejemplo para trabajar con tu comando específico de subprocess y monitorizar su salida según las necesidades.