tuberias significa salidas salida redirigir redireccionar redireccionamiento que guardar filtros fichero comando canal archivo linux terminal tty

significa - redirigir salidas linux



Capturando una redirección directa a/dev/tty (4)

Estoy trabajando en un controlador de aplicaciones para un programa que está escupiendo texto directamente a / dev / tty.

Este es un controlador de aplicación de producción que debe poder capturar todo el texto que va a la terminal. En general, esto no es un problema. Simplemente redirigimos stdout y stderr. Esta aplicación particular está haciendo llamadas directas para hacer eco y redirigir el resultado a / dev / tty ( echo "some text" > /dev/tty ). Los redireccionamientos a través de mi controlador de aplicación no captan el texto.

Tengo la fuente de esta aplicación, pero no estoy en condiciones de modificarla ni de mantenerla. ¿Alguna idea sobre cómo atrapar y / o tirar la producción?


No puedo determinar si el programa de screen mencionado por @flolo hará lo que usted necesita o no. Puede, pero no estoy seguro si hay una instalación de registro integrada, que parece ser lo que necesita.

Probablemente ya exista un programa para hacer lo que necesita. Yo nominaría a sudosh como una posibilidad.

Si termina necesitando escribir el suyo, probablemente necesite usar un pseudo-tty (pty) y tener su controlador de aplicación entre la conexión de terminal real del usuario y el dispositivo pequeño, donde puede registrar lo que necesite para iniciar sesión Eso no es trivial. Puede encontrar información sobre esto en el libro " Advanced UNIX Programming, 2nd Edn " de Rochkind , y sin duda otros libros similares (es probable que el libro "Programación avanzada en el entorno UNIX" de Stevens sea candidato, pero no tengo una copia para comprueba eso).


screen -D -m yourEvilProgram

Deberia trabajar. Pasó mucho tiempo sincedo, lo usé, pero si necesita leer algo de su salida, incluso podría ser posible que pueda utilizar algunos enchufes para leerlo.

[ Agregado : dos enlaces, Rackaid y Pixelbeat , y la página de inicio en GNU ]


La solución clásica para controlar una aplicación como esta es Expect , que configura pseudo-terminales, registra y maneja la aplicación controlada desde un script. Viene con muchos scripts de muestra, por lo que probablemente solo pueda adaptar uno para que se ajuste a sus necesidades.


Esto es lo que hice en Python

import pty, os pid, fd = pty.fork() if pid == 0: # In the child process execute another command os.execv(''./my-progr'', ['''']) print "Execv never returns :-)" else: while True: try: print os.read(fd,65536), except OSError: break