2016-06-01 9 views
1

Dies kann nicht die beste Formulierung für die Frage sein. Ich versuche, 2 Dateien gleichzeitig auf meinem Bildschirm zu sehen. Ich betreiben:Wie funktioniert multitail seinen Ausgangspuffer?

multitail ~/path/to/somefile.err ~/path/to/somefile.out 

Ich habe einen Python-Skript mit den folgenden Zeilen:

sys.stdout = open('~/path/to/somefile.out', 'a') 
sys.stderr = open('~/path/to/somefile.err', 'a') 

Mein multitail Befehl scheint nur dann ausgegeben, meine .out-Datei, unabhängig davon, welche Reihenfolge ich die Dateien in dem setzen Befehl. Ich

Nachweis erbracht, dass mein Skript in der Tat auf die Dateien schreibt. Was auch interessant ist, war, dass, wenn ich den folgenden Befehl:

echo "text" >> ~/path/to/somefile.err 

Urplötzlich ich alle die Ausgabe von der err-Datei, in dem multitail Bildschirm (einschließlich dem, was vorher nicht angezeigt hat) !

Was hier vor sich geht, dass ich nicht sehen kann?

P.S. Das ist das erste Mal, dass ich Multitail benutze, vielleicht habe ich etwas Einfaches übersehen. Wenn es etwas bedeutet, ich bin mit CentOS 7.

+1

die Stderr (.err) wird wahrscheinlich gepuffert und nachdem genügend Informationen gepuffert wurde dann wird es alles erscheinen. Geben Sie für 'unbuffer' auf Ihrem Rechner, und falls vorhanden, können Sie' unbuffer' einzelner Ausgang cmds (nicht sicher, was Sie in 'python' tun.). Sie können wahrscheinlich 'python3 mypython.py' unbuffered. In der GNU coreutils gibt es auch 'stdbuf', die die gleiche Sache tut, müssen aber möglicherweise anders genannt werden. Überprüfen Sie 'man stdbuf'. Viel Glück. – shellter

Antwort

1

Sie müssen entweder buffering=0 (für ungepufferte) oder buffering=1 (für Line-gepuffert - wahrscheinlich das, was Sie wollen) passieren in Ihren Anruf open.

Der Standardwert ist buffering=-1, was zu etwas wie buffering=512 mit einem Wert je nach System entspricht, so dass nichts in die Datei geschrieben wird, bis 512 (oder was auch immer) Bytes geschrieben werden.


Alternativ können Sie buffering Satz auf den Standardwert verlassen, und rufen .flush() jedes Mal, wenn die Daten wollen in der Datei angezeigt werden.


Wenn Sie >> in der Shell verwenden, die die Datei schließen, wenn der Befehl beendet wird, und Schließen einen Flush impliziert. (Sie können die Schließung verzögern mit exec >> file.txt)

Verwandte Themen