Question

Je travaille sur un contrôleur d'application pour un programme qui crache du texte directement dans / dev / tty.

Il s’agit d’un contrôleur d’application de production qui doit pouvoir saisir tout le texte envoyé au terminal. Généralement, ce n'est pas un problème. Nous redirigeons simplement stdout et stderr. Cette application particulière appelle directement echo et redirige le résultat vers / dev / tty ( echo "du texte" > / dev / tty ). Les redirections via mon contrôleur d'application ne parviennent pas à saisir le texte.

J'ai le code source de cette application, mais je ne suis pas en mesure de le modifier et il n'est plus maintenu. Des idées sur comment attraper et / ou jeter la sortie?

Était-ce utile?

La solution

Je ne peux pas vraiment déterminer si le programme screen mentionné par @flolo fera ce dont vous avez besoin ou non. Peut-être, mais je ne sais pas s’il existe une installation de journalisation intégrée, ce qui semble être ce dont vous avez besoin.

Il existe probablement déjà un programme pour faire ce dont vous avez besoin. Je choisirais sudosh comme possibilité.

Si vous finissez par avoir besoin d'écrire votre propre, vous devrez probablement utiliser un pseudo-tty (pty) et laisser votre contrôleur d'application se placer entre la connexion réelle du terminal de l'utilisateur et le périphérique pty, où il pourra se connecter. tout ce dont vous avez besoin pour vous connecter. Ce n'est pas trivial. Vous trouverez des informations à ce sujet dans le site de la programmation UNIX avancée, Rochkind . " livre, et sans doute d’autres ouvrages similaires (le livre de Stevens "Le livre" Programmation avancée dans l’environnement UNIX "est probablement candidat, mais je n’en ai pas de copie pour le vérifier).

Autres conseils

 screen -D -m yourEvilProgram

devrait fonctionner. Beaucoup de temps s'est écoulé depuis que je l'ai utilisé, mais si vous avez besoin de lire certaines de ses sorties, il est même possible que vous utilisiez des sockets pour les lire.

[ Ajouté : deux liens, Rackaid et Pixelbeat , ainsi que la page d'accueil de GNU ]

La solution classique pour contrôler une telle application est Expect , qui configure des pseudo-terminaux, se connecte et pilote l'application contrôlée à partir d'un script. Il contient de nombreux exemples de scripts, vous pouvez donc probablement en adapter un à vos besoins.

Voici ce que j'ai fait 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top