Ich stochle mit einem Problem mit Python. Ich habe Python 2.7.13 und Python 3.6.0 auf Red Hat Enterprise Linux Server Version 7.1 (Maipo) verwendet. Um die Ausgabe der Prozesse zu überwachen, möchte ich tail -f
verwenden, um live in STDOUT und STDERR zu schauen. Das Schlüsselwort ist hier ungepufferte Ausgabe. Viele Vorschläge im Internet sagen Verwendung python -u ...
oder die Umgebungsvariable PYTHONUNBUFFERED wie PYTHONUNBUFFERED=1 python ...
oder stdbuf -e0 -o0 python ...
. Nichtsdestotrotz wappnet sich nichts für das folgende Testskript.Python arbeitet nicht im ungepufferten Modus
import sys
import time
while(True):
print("Test String")
time.sleep(1);
Für alle verschiedenen Befehle habe ich immer gepufferte Ausgabe. Auch wenn ich STDERR benutzen möchte. Es ist immer noch gepuffert, was mich wirklich verwirrt, weil STDERR standardmäßig ungepuffert sein sollte. Die Verwendung von sys.stdout.flush()
oder sys.stderr.flush()
funktioniert auch nicht. Bei Verwendung von flush=True
innerhalb print()
funktioniert es wie vorgesehen.
Ich bin auf der Suche nach einer Lösung, die es nicht notwendig macht, Code zu bearbeiten, weil ich nicht alle Programme bearbeiten kann, um ungepufferte und sofort ausgespuckte Ausgabe zu erhalten. Wie kann ich das erreichen?
Wir freuen uns auf Ihre Antworten!
Beste Wünsche!
Was erwarten Sie Ihr Testskript tut? –
Sie können die Funktion 'print (flush = True)' außer Kraft setzen. –
So hat mein ursprüngliches Skript einige Ergebnisse von Deep Learning und neuronalen Netzwerkschritten, die ich überwachen möchte. In meinem Testskript habe ich es auf eine Dummy-Ausgabe beschränkt, um zu sehen, ob die Ausgabe ungepuffert ist. @ElisByberi dafür muss ich Code bearbeiten. Einige Programme sind so riesig, dass es in einem Durcheinander enden würde, um alles zu bearbeiten. Ich suche nach etwas 'python -u' oder' PYTHONUNBUFFERED' anstatt dass sie arbeiten .. Ich weiß nicht einmal warum sie sind funktioniert nicht wie angekündigt. – TheOrangeman