Le code suivant se termine par bris de tuyau lorsque canalisé en tee, mais se comportent correctement lorsqu'ils ne sont pas canalisé:stdout python couleur et 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()
Sortie prévue:
./bug.py
Ctrl-C pressed
Ce qui est observé lorsque canalisé dans tee est soit un tuyau cassé ou pas de sortie du tout, c.-à-rien sur la sortie standard de départ, et rien dans 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
Quelle peut en être la raison ?
Je pense Ctrl-C enfoncé apparaître dans le journal. – shodanex
Bien sûr. Malheureusement, le processus du 'tee' sera probablement passé. Je redirigerais simplement le fichier std de python vers un fichier, puis j'achèverais ce fichier. Ou, selon votre shell, vous pouvez probablement faire quelque chose de spécial pour rediriger et écrire encore sur la console. –
Ah. Juste vu votre entreprise de tuyaux nommés ci-dessous –