2013-10-09 3 views
5

Ich würde Standardausgabe von einem Skript von mir zu einer Datei protokollieren, aber auch es mir auf dem Bildschirm für Echtzeitüberwachung angezeigt haben. Das Skript gibt ungefähr 10 Mal jede Sekunde aus.Anzeige von stdout auf dem Bildschirm und eine Datei gleichzeitig

Ich habe versucht, stdout zu einer Datei umzuleiten und dann tail -f diese Datei von einem anderen Terminal, aber aus irgendeinem Grund aktualisiert Schwanz den Bildschirm deutlich langsamer als das Skript in die Datei schreibt.

Was verursacht diese Verzögerung? Gibt es eine alternative Methode, um einen Standard-Ausgabestream sowohl auf meinem Terminal als auch in einer Datei zur späteren Untersuchung zu erhalten? Befehl

Antwort

7

Ich kann nicht sagen, warum tail Lags, aber Sie können verwenden tee:

Redirect output to multiple files, copies standard input to standard output and also to any files given as arguments. This is useful when you want not only to send some data down a pipe, but also to save a copy.

Beispiel: <command> | tee <outputFile>

+0

Coole Befehl, war mir vorher nicht bewusst. Aber auf meiner Mac OSX-Box scheint es noch schlimmer zu liegen als Tail -f. Sehr komisch.... – BBnyc

2

Verwenden: T-

tail -f /path/logFile | tee outfile 
3

Wieviel ein lag sehen Sie? Ein paar hundert Zeichen? Ein paar Sekunden? Protokoll? Std?

Was Sie sehen, ist Pufferung. Fast alle Lese- und Schreibvorgänge werden gepuffert. Dies umfasst Eingabe und Ausgabe und es gibt auch eine Pufferung innerhalb von Pipes. Es ist nur effizienter, ein Datenpaket um ein Byte herum zu übertragen. Ich glaube, Daten auf HFS + Dateisystemen werden in UTF-16 gespeichert, während Mac OS X normalerweise UTF-8 als Standard verwendet. (NTFS speichert Daten auch mit UTF-16, während Windows standardmäßig Codepages für Zeichendaten verwendet).

Also, wenn Sie tail -f von einem anderen Terminal ausführen, können Sie die Pufferung von tail sein zu sehen, aber wenn man ein Rohr verwenden und dann tee, können Sie einen Puffer in der Leitung haben, und in dem tee Befehl die vielleicht, warum Sie Siehe die Verzögerung.

By the way, wie Sie wissen, gibt es eine Verzögerung ? Woher wissen Sie, wie schnell Ihr Programm auf die Festplatte schreibt? Drucken Sie etwas in Ihrem Programm aus, um die Schreibvorgänge in der Datei zu verfolgen?

In diesem Fall werden Sie möglicherweise nicht so schnell nachgeben, wie Sie denken. Dateischreibvorgänge werden ebenfalls gepuffert. So ist es sehr gut möglich, dass die Verzögerung nicht von der tail -f, sondern von Ihrem Skript Schreiben an die Datei ist.

Verwandte Themen