Ich bin faul und könnte ein Skript schreiben, um dies zu tun, aber ich bin sogar zu faul, um darüber nachzudenken, wie es geht.
Ich mache oft Dinge wie:
cris$ python runexperiment.py > output.txt
cris$ cat output.txt
Manchmal, wenn ich mir die lange Ausgabe eines Experiments anschaue, lasse ich die Seite einfach scrollen und beobachte, wie sich die aufeinanderfolgenden Muster bilden und zerstreuen. Die Verwendung von cat für eine Datei mit 1 Million Zeilen dauert jedoch möglicherweise 5 Sekunden. Das ist selbst für mich zu schnell.
Gibt es eine Möglichkeit, die Anzeige der Datei zu verlangsamen, so etwas wie ein "Bildlauf-Dienstprogramm"? Ich möchte schnelle, aber nicht 200.000 Zeilen pro Sekunde (von denen sich das Display vermutlich sowieso nie registrieren würde).
Etwas wie
cris$ scroll -lps=300 output.txt
Und dann wäre es ideal, sich zurückzulehnen und 300 Zeilen pro Sekunde vorbeiziehen zu sehen, wie ich mir vorstellen kann.
cat FILENAME | pv -l -L 900 -q
. Die Grenze liegt in Bytes pro Sekunde, nicht in Zeilen pro Sekunde, daher mache ich dies zu einem Kommentar und nicht zu einer Antwort.Antworten:
Kurz und lesbar :
Ich poste diese Lösungen, weil sie klein und lesbar sind, da Kommentare der Antwort von DMas diese Art von Lösung zu fördern scheinen!
Aber ich hasse es , weil: Für diesen Lauf, perl wird Gabel zu
/bin/sleep
300x / Sekunden!Dies ist ein großer Ressourcenverbraucher! Auch eine falsche gute Lösung !!
Mit eingebautem Schlaf in Perl
Leider ist Builtin
sleep
auf ganze Zahlen beschränkt. Also müssen wirselect
stattdessen verwenden:Unter Perl
print while <>
könnte durch den-p
Schalter ersetzt werden:Lass es uns versuchen:
Erläuterung:
300 Zeilen / Sek. Bedeutet 1 Zeile pro 0,0033333333 Sekunden.
print
ohne Argument wird gedruckt,$_
was der Standardeingabebereich ist .genannt , wie
... | perl -e
,... | perl -ne
oder... | perl -pe
würde die Standardeingabe automatisch zugewiesen werden ,*STDIN
was Standard Dateideskriptor , also<>
das gleiche tun würde , wie<STDIN>
die von der Standardeingabe bis gelesen wird$/
( Eingangsdatensatztrennzeichen, das eine standardmäßig ist Neue - Zeile ) erreicht wird. In Englisch wird standardmäßig eine Zeile aus der Standardeingabe<>
gelesen und der Variablen Inhalt zugewiesen .$_
&&
ist eine und -Bedingung, wird dort jedoch als Trennzeichen für Kettenbefehle verwendet, sodass nach (erfolgreichem) Drucken einer Zeile der nächste Befehl ausgeführt wird.select
ist ein Tricksleep
eines Programmierers, den man nicht benutzt . Dieser Befehl dient zum Abfangen von Ereignissen in Dateideskriptoren (Ein- und / oder Ausgänge, Dateien, Sockets und / oder Net-Sockets). Mit diesem Befehl kann ein Programm auf drei Arten von Ereignissen warten : Feed bereit zum Lesen , Feed bereit zum Schreiben und ein Ereignis ist im Feed aufgetreten . Das vierte Argument ist eine Zeitüberschreitung in Sekunden, die Syntax alsoselect <feeds where wait for input>, <feeds where having to write>, <feed where something could happen>, <timeout>
.Für mehr Präzision können Sie das
Time::Hires
Perl-Modul verwenden:Hinweis:
$.
ist die aktuelle Eingabezeilennummer .Besser geschrieben als
cat >catLps.pl
Verwendung:
So konnten wir:
Zum Spass:
quelle
Time::HiRes
Perl-Modul für mehr Genauigkeit hinzugefügt-p
Befehls zum Perl wechseln wurde das Skript erleichtert!benutze einfach awk mit schlaf:
quelle
system(*sleep .1")
generiert 10 Gabeln / Sek.! Dies könnte geschrieben werdenperl -pe 'system "sleep .1"' log.txt
: Lesbar auch, aber sehr teuer (nicht systemfreundlich!)Ich bin zu spät zur Party, aber ich fand, dass dies eine nützliche Lernübung wäre, um es in Python zu versuchen, also werde ich aufstellen, was ich habe:
Es akzeptiert Eingaben von stdin oder als Argument (-i) und schreibt standardmäßig eine Zeile pro 1/10 Sekunde, dies kann jedoch durch ein anderes Argument (-d) geändert werden.
quelle