Frage

Ich arbeite an einer Anwendung Controller für ein Programm, das den Text direkt auf / dev / tty spuckt.

Dies ist eine Produktionsanwendung Controller, der Lage sein müssen, den gesamten Text geht an das Terminal zu fangen. Im Allgemeinen ist dies kein Problem. Wir umleiten einfach stdout und stderr. Diese besondere Anwendung macht direkte Anrufe Echo und das Ergebnis an / dev / tty (echo "some text" > /dev/tty) umgeleitet wird. Leitet über meine Anwendung Controller fehlschlagen, den Text zu fangen.

ich tun, um die Quelle für diese Anwendung haben, aber ich bin nicht in der Lage, ihn zu ändern, noch ist es nicht mehr gehalten wird. Alle Ideen, wie zu fangen und / oder die Ausgabe wegzuwerfen?

War es hilfreich?

Lösung

Ich kann nicht ganz fest, ob das Programm screen von @flolo erwähnt werden tun, was Sie brauchen oder nicht. Es kann, aber ich bin mir nicht sicher, ob es eine Protokollfunktion eingebaut ist, das, was zu sein scheint, die Sie benötigen.

Es ist wahrscheinlich ein Programm da draußen schon zu tun, was Sie brauchen. Ich würde vorschlagen sudosh als Möglichkeit.

Wenn Sie am Ende brauchen Ihre eigenen zu schreiben, müssen Sie wahrscheinlich eine pseudo-tty (pty) verwenden und Ihre Anwendungssteuerung zwischen dem Benutzer realen Terminalverbindung sitzen in und die pty Gerät, wo es log was auch immer Sie es brauchen loggt sein. Das ist nicht trivial. Sie können Informationen über diese in der Rochkind „ Erweiterte UNIX Programmierung, 2. Ausgabe “ finden Buch, und ohne Zweifel andere ähnliche Bücher (Stevens' ‚Advanced Programming in der UNIX-Umgebung‘ Buch ist ein aussichtsreicher Kandidat, aber ich habe nicht eine Kopie, das zu überprüfen).

Andere Tipps

 screen -D -m yourEvilProgram

sollte funktionieren. Viel Zeit verbrachte ich es sinced verwendet, aber wenn man einen Teil seiner Ausgabe zu lesen brauchen könnte es sogar möglich sein, dass Sie einige Steckdosen nutzen könnte es zu lesen.

[ Hinzugefügt : zwei Links, Rackaid und Pixelbeat und die Homepage unter GNU ]

Die klassische Lösung, eine Anwendung so zu steuern ist Expect , die einrichtet pseudo-Terminals, Anmeldung der Fall ist, und fährt von einem Skript die kontrollierte Anwendung. Es kommt mit vielen Beispielskripts so können Sie wahrscheinlich nur eine Anpassung an Ihre Bedürfnisse anzupassen.

Das ist das, was ich in Python tat

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top