Redirigir la salida del programa Python a /dev/null

Redirigir la salida del programa Python a /dev/null

Tengo un ejecutable de Python, escrito y compilado por otra persona, que simplemente necesito ejecutar una vez a la mitad de mi propio script bash. El programa utiliza una interfaz de usuario basada en texto, por lo tanto espera la entrada antes de continuar, pero las operaciones clave que realiza al iniciar son necesarias en mi script bash. Es un procedimiento complicado (y extraño), lo sé, pero lamentablemente no tengo otras opciones.

He logrado cerrar el programa a la fuerza con una señal de interrupción, pero la TUI del programa insiste en enviarse a cualquier lugar donde se ejecute. Intenté redirigir tanto stdout como stderr a /dev/null y ejecutar el programa en segundo plano agregando un sufijo comercial, pero simplemente no puedo lograr que funcione. Creo que la causa es que el programa genera otros procesos y la redirección de salida del proceso principal no los afecta. ¿Existe algún truco que pueda utilizar para redirigir también todos los resultados de los procesos secundarios?

Respuesta1

Es posible que el programa esté escribiendo en tty en lugar de en stdout. Es posible que pueda utilizar el unbuffer script que viene conexpecto alguna otra técnica usando expecto algo similar.

Aquí hay una demostración. Crea este script y llámalo "writetty". Entonces hazlo chmod u+x writetty:

#!/bin/bash
date > /dev/tty

Ahora pruébalo:

$ ./writetty
Tue Jun  8 12:24:36 CDT 2010
$ ./writetty > /dev/null
Tue Jun  8 12:24:46 CDT 2010
$ var=$(./writetty)
Tue Jun  8 12:24:56 CDT 2010
$ unbuffer ./writetty > /tmp/writetty.out
$ cat /tmp/writetty.out
Tue Jun  8 12:25:06 CDT 2010
$ var=$(unbuffer ./writetty)
$ echo $var
Tue Jun  8 12:25:16 CDT 2010

Podría utilizar expectpara responder a la solicitud de entrada del programa en lugar de eliminarlo.

información relacionada