Leiten Sie die Ausgabe des Python-Programms nach /dev/null um

Leiten Sie die Ausgabe des Python-Programms nach /dev/null um

Ich habe eine Python-Programmdatei, die von jemand anderem geschrieben und kompiliert wurde und die ich einfach einmal in der Mitte meines eigenen Bash-Skripts ausführen muss. Das Programm verwendet eine textbasierte Benutzeroberfläche und wartet daher auf Eingaben, bevor es fortfährt, aber die Tastenoperationen, die es beim Start ausführt, sind in meinem Bash-Skript erforderlich. Ich weiß, das ist ein chaotisches (und seltsames) Verfahren, aber leider habe ich keine anderen Optionen.

Ich bin um das zwangsweise Schließen des Programms mit einem Kill-Signal herumgekommen, aber die TUI des Programms besteht darauf, die Ausgabe dorthin zu senden, wo es ausgeführt wird. Ich habe versucht, sowohl stdout als auch stderr nach /dev/null umzuleiten und das Programm im Hintergrund laufen zu lassen, indem ich ein Et-Zeichen angehängt habe, aber ich bekomme es einfach nicht zum Laufen. Ich glaube, die Ursache ist, dass das Programm andere Prozesse startet und die Ausgabeumleitung des übergeordneten Prozesses diese nicht beeinflusst. Gibt es einen Trick, mit dem ich auch die gesamte Ausgabe von untergeordneten Prozessen umleiten kann?

Antwort1

Das Programm schreibt möglicherweise auf das TTY statt auf die Standardausgabe. Möglicherweise können Sie das unbuffer mitgelieferte Skript verwenden.expectoder eine andere Technik expectoder etwas Ähnliches verwenden.

Hier ist eine Demonstration. Erstellen Sie dieses Skript und nennen Sie es „writetty“. Dann führen Sie Folgendes aus chmod u+x writetty:

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

Probieren Sie es jetzt aus:

$ ./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

Sie können verwenden expect, um auf die Eingabeanforderung des Programms zu reagieren, anstatt es zu beenden.

verwandte Informationen