2010-12-16 41 views
8

Unter Linux versuche ich, stdout von einer Konsolenanwendung in eine Datei statt Konsole umleiten. Ich habe den Quellcode nicht. Ich habe mehrere Methoden ausprobiert, aber alle führten zu einer leeren Datei. Ohne Ausgabeumleitung funktioniert alles einwandfrei (ich sehe Konsolenmeldungen).Ausgabeumleitung funktioniert nicht für ein bestimmtes Programm

Ich habe versucht, zum Beispiel:

progname > out.txt 
progname > out.txt 2&>1 

Und nichts scheint in out.txt und in der Konsole.

Ich habe versucht, die Anwendung mit strace auszuführen. Wenn ich keine Umleitung verwenden Ich sehe Linien wie -

write(1, "bla bla", 8) 

Wenn ich die Umleitung der Ausgabe einführen, gibt es keine Schreib an alle Anrufe, die mich denken lässt, ist die Anwendung für etwas zu testen, bevor die Nachricht zu schreiben. Nach was sucht die Anwendung? Wie kann ich es umgehen?

Ich benutze CentOS 5.5 und Bash.

Antwort

5

Basierend auf Ihrem strace klingt es wie das Programm testet wenn stdin und/unsere stdout ein tty ist. Ich habe es nie benutzt, aber Sie könnten versuchen, empty.sourceforge.net zu verwenden. Es wird angenommen, dass ein Pseudo-Tty erstellt wird, der die Überprüfung Ihres Programms täuschen sollte.

+0

Danke! es funktioniert - leer -f -L out.txt progname – kshahar

9
progname > out.txt 2>&1 

bearbeitet: Wenn Sie dies tatsächlich tun und es war in Ihrer Frage ein Tippfehler. Es ist möglich, dass die Anwendung prüft, ob die Ausgabe ein TTY ist.

Edit2: Ok, in diesem Fall versuchen script -qc progname > out.txt > 2>&1

In Debian/Ubuntu, script ist ein Teil des bsdutils-Paket, das ein essentielles Paket ist und immer installiert.

+0

Richtig, es gibt einen Tippfehler in der Frage. Aber irgendwie weiß ich, dass die Anwendung stdout verwendet. Wie kann ich die Ausgabenachricht ergreifen, wenn es nach TTY sucht? – kshahar

1

Versuchen Sie, einen einzigen Strom zu einem Zeitpunkt, zu/dev/null umgeleitet werden, um zu sehen, welche es auf druckt:

progname > /dev/null 
progname 2> /dev/null 

Dann werden Sie sehen, die streamen Sie erfassen müssen. Aus technischen Gründen drucken einige Programme sogar informative Nachrichten auf stdout.

Verwandte Themen