GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum hat stdbuf keine Auswirkung auf Python?

Standardmäßig Pythons print() Die Funktion leitet ihre Ausgabe an sys.stdout , dessen Dokumentation dies spezifiziert:

Bei Interaktivität stdout und stderr Streams sind zeilengepuffert. Andernfalls werden sie wie normale Textdateien blockgepuffert. Sie können diesen Wert mit dem -u überschreiben Befehlszeilenoption.

Beachten Sie gut, dass diese Dokumente keinen Platz für allgemeine Umwelteinflüsse lassen, wie z. B. den des stdbuf Befehl, auf den Puffermodus von sys.stdout :es ist ungepuffert, wenn -u Option verwendet wurde (oder äquivalent, wenn die Umgebungsvariable PYTHONUNBUFFERED gesetzt), ansonsten zeilengepuffert wenn interaktiv und blockgepuffert wenn nicht interaktiv.

Programme können ihre eigene Pufferung steuern, wie die Dokumentation von stdbuf zeigt bestätigen:

HINWEIS:Wenn COMMAND die Pufferung seiner Standard-Streams anpasst (z. B. „tee“ tut dies), dann überschreibt dies die entsprechenden Einstellungen, die von „stdbuf“ geändert wurden. Außerdem verwenden einige Filter (wie 'dd' und 'cat' usw.) keine Streams für I/O und werden daher nicht von 'stdbuf'-Einstellungen beeinflusst.

Da Python explizit Pufferungsdetails spezifiziert, ist es vernünftig zu erwarten, dass es tatsächlich seine Pufferung sicher verwaltet und somit jegliche Auswirkung von stdbuf in Frage stellt .


Linux
  1. Warum hat ein MySQL-Benutzer eine Bash-Shell in /etc/passwd?

  2. Die Ausgabe von Ls hat Zeilenumbrüche, wird aber in einer einzigen Zeile angezeigt. Wieso den?

  3. Was passiert mit der Ausgabe eines Prozesses, der enteignet wurde und sein Terminal verloren hat?

  4. Df vs. Du:Warum so viel Unterschied??

  5. Warum rät die Apt-key-Manpage davon ab, ihren Add-Befehl zu verwenden?

Python if..else-Anweisung

Warum benötigt `python` bei Verwendung von os.execlp `python` als argv[0]

Python-Fehler AttributeError:'Modul'-Objekt hat kein Attribut 'sha1'

Warum hat meine initrd nur ein Verzeichnis, nämlich 'kernel'?

Warum ist mein Bind-Mount außerhalb seines Mount-Namespace sichtbar?

Warum zeigt mein Linux-Hyper-V-Gast seine IP-Adresse nicht im Hyper-V-Manager an