So schreiben Sie die Ausgabe von live-f1 in eine Datei


10

Ich habe das Terminal geöffnet und live-f1 ausgeführt, das Live-Feeds im Terminal (Text) anzeigt, die sich jede Sekunde ändern. Während dieses Programms ausgeführt wird, kann nur die Eingabetaste verwendet werden (das Programm wird beendet). Sie können also nichts anderes in die Konsole eingeben.

Ich möchte den Terminalinhalt wie nach jeder Sekunde in eine Datei schreiben.

Wie kann ich es tun?

Durch Öffnen der 2. Konsole und Verwenden eines Befehls?

Mit dem Befehl setterm -dump kann es nicht zum Laufen gebracht werden.

Antworten:


8

live-f1Zeichnet den Bildschirm mit neuen Daten neu, indem Terminal-Steuerzeichen (ncurses) verwendet werden, genau wie topoder mtr. Aus diesem Grund wird all dieser Müll angezeigt, wenn Sie zu einer Datei oder einem Nicht-Endgerät umleiten.

Bietet leider live-f1keine Option, um eine Ausgabe zu erhalten, die zum Speichern und späteren Extrahieren von Daten für Statistiken und dergleichen geeignet ist. Wenn Sie die Ausgabe weiterhin speichern möchten, um sie später wiederzugeben, können Sie sie verwenden script.

Dadurch wird live-f1 aufgezeichnet und zwei Dateien erstellt, Typoskript und Timing-Datei.

script -c live-f1 -t 2> timingfile

Dadurch wird die Ausgabe wiedergegeben

scriptreplay timingfile

7

Es gibt einige Möglichkeiten, wie ich die Ausgabe in einer Datei erfassen kann, die für Sie von Nutzen sein kann.

script

Dadurch wird eine Unterschale erstellt und die gesamte Ausgabe wird darin abgelegt. Also script, was auch immer Sie wollen, dann exitbeenden Sie Ihre Subshell und Ihre Ausgabe wird in einer Datei namens "Typoskript" sein.

tee

Sie können die gesamte Pipe an einen anderen Ort übertragen. So können teeSie Ihre Standardausgabe in eine Datei verschieben:

$ mycommand | tee myoutput

Wenn Sie auch Standardfehler erfassen müssen, leiten Sie ihn um:

$ mycommand 2>&1 | tee myoutput

6

Wie wäre es, wenn Sie das Programm so ausführen:

program > /path/to/file

Dadurch wird die Ausgabe von programauf /path/to/filesofort umgeleitet .

Und wenn Sie die Ausgabe in Ihrem Terminal haben und in einer Datei speichern möchten. Check out Gibt es in bash eine Möglichkeit, die Ausgabe umzuleiten und sie trotzdem auf stdout zu setzen?


Danke für die schnelle Antwort. Dies funktioniert fast, nur der Dateiinhalt ist etwas verstümmelt. Es sollte in HTML sein, aber wenn ich die Datei öffne, gibt es einige seltsame Symbole, siehe Screenshot: upload.ee/image/1223166/ss_01.png . Der Programmname lautet live-f1.
Gustav

Das sieht lustig aus. Sind Sie sicher, dass das Programm nur HTML ausgibt? Gibt es eine Animation oder etwas Seltsames?
Phunehehe

Dadurch wird nur die Standardausgabe umgeleitet. Ist auch ein Standardfehler erforderlich?
Faheem Mitha

2
@Gustav Dort sind auch ANSI-Codes eingeschlossen. Entweder gibt Ihre Anwendung eine Art Fortschrittszähler aus (wie er aussieht) oder er färbt die Ausgabe oder ähnliches. Wenn es eine Möglichkeit gibt, dies auszuschalten, müssen Sie es verwenden, um eine saubere Ausgabe zu erfassen. Ihre Anwendung gibt jedoch kein HTML aus. Um HTML zu erfassen, benötigen Sie eine andere Anwendung, um die Ausgabe zu übersetzen.
Matthew Scharley

Warum ich sage, dass es HTML ist, weil ich es vor einem Jahr zum Laufen gebracht habe, aber die Festplatte, auf der ich die Arbeitsumgebung hatte, neu formatiert habe. Mein Ziel ist es, die Positionen der Formel-1-Fahrer aus dem Live-F1-Feed in eine Datei aufzunehmen. Ich habe es letztes Jahr zum Laufen gebracht, indem ich das Programm live-f1 im 1. Terminal ausgeführt, dann das 2. Terminal gestartet und mit einem Befehl den Bildschirm des 1. Terminals erfasst und in einer Datei gespeichert habe (Kopie aus der letztjährigen Datei: upload.ee/download/1223347) /0b6545ce227661452c8/html.log ). Befehl war so ähnlich: tty "1st Terminal Pointer" "Dateiname" "Intervall"
Gustav

3

Sie können den GNU-Bildschirm zusammen mit seiner Protokollierungsfunktion verwenden . Beachten Sie auch, dass Sie mit dem logfile flush secsBefehl steuern können, wie oft die Ausgabe auf die Festplatte geschrieben wird. Aus dem Bildschirm Benutzerhandbuch:

- Befehl: logfile flush secs

Definiert den Namen, den die Protokolldateien erhalten. Der Standardwert ist 'screenlog.% N'. Das zweite Formular ändert die Anzahl der Sekunden. Der Bildschirm wartet, bevor der Protokolldateipuffer in das Dateisystem geleert wird. Der Standardwert ist 10 Sekunden.


Ich werde es untersuchen.
Gustav
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.