Das Betriebssystem puffert die Ausgabe bis zu einem bestimmten Betrag, aber es kann immer noch zu einer starken Kopfbewegung kommen, wenn sich sowohl die Eingabe- als auch die Ausgabedatei auf demselben Laufwerk befinden, es sei denn, Sie führen process.py
eine eigene Pufferung durch.
Sie können cat
in Ihrem Beispiel den Pipe Viewer (pv) ersetzen (verfügbar in den meisten Standard-Repositorys und problemlos einzuhalten, wenn er nicht im Repo Ihrer Distribution enthalten ist), mit dem Sie festlegen können, dass mehr Puffer (mit den Optionen -B
/ --buffer-bytes
) und a angezeigt werden Fortschrittsbalken (es sei denn, Sie fordern ihn nicht auf), der für einen langen Vorgang sehr praktisch sein kann, wenn Sie process.py
keine eigenen Fortschrittsinformationen ausgeben. Wenn Daten von einem Ort auf einem Laufwerk an einen anderen Ort auf demselben Laufwerk übergeben werden, kann dies einen großen Unterschied machen, es sei denn, der Gesamtprozess ist in erster Linie an die CPU und nicht an die E / A gebunden.
Für einen 1-MB-Puffer könnten Sie also Folgendes tun:
pv -B 1m large.input.file | process.py > large.output.file
Ich benutze die pv
ganze Zeit für diese Art von Dingen, obwohl hauptsächlich für die Fortschrittsanzeige mehr als die einstellbare Puffergröße.
Eine andere Option ist die Verwendung des "Standard" (Standard in Bezug auf die allgemeine Verfügbarkeit, das Befehlszeilenformat unterscheidet sich ein wenig von den meisten gängigen Befehlen) dd
, obwohl dies nicht über die Fortschrittsbalkenfunktion verfügt:
dd if=large.input.file bs=1048576 | process.py > large.output.file
Bearbeiten: ps. Anhänger weisen möglicherweise darauf hin, dass cat
dies in Ihrem Beispiel nicht erforderlich ist, da Folgendes genauso gut funktioniert und etwas effizienter ist:
process.py < large.input.file > large.output.file
Einige Leute bezeichnen die Beseitigung nicht bedingter Aufrufe cat
als "Demogifizierung", diese Leute sollten wahrscheinlich nicht ermutigt werden ...