Der folgende Code endet mit Rohrbruch, wenn sie in T-Shirt aus geleitet, aber korrekt verhalten, wenn nicht verrohrt:Python stdout bündig und Tee
#!/usr/bin/python
import sys
def testfun():
while 1:
try :
s = sys.stdin.readline()
except(KeyboardInterrupt) :
print('Ctrl-C pressed')
sys.stdout.flush()
return
print s
if __name__ == "__main__":
testfun()
sys.exit()
Erwartete Ausgabe:
./bug.py
Ctrl-C pressed
Was beobachtet wird, wenn verrohrt in T-Shirt ist entweder ein Rohrbruch oder keine Ausgabe überhaupt, das heißt nichts auf T-stdout, und nichts in bug.log:
./bug.py | tee bug.log
Traceback (most recent call last):
File "./bug.py", line 14, in <module>
sys.stdout.flush()
IOError: [Errno 32] Broken pipe
Was kann der Grund dafür sein?
Ich erwarte, dass Ctrl-C angezeigten Mann-T gedrückt im Protokoll. – shodanex
Natürlich. Leider wird der 'Tee' Prozess wahrscheinlich bis dahin vorbei sein. Ich würde einfach die Python-Standardausgabe in eine Datei umleiten und dann diese Datei beenden. Abhängig von Ihrer Shell können Sie wahrscheinlich etwas Umständliches tun, um weiterzuleiten und weiterhin auf die Konsole zu schreiben. –
Ah. Ich habe gerade Ihr Named-Pipes-Geschäft unter –