Question Quel est le problème avec la commande de tee?


Je cours le suivant python scénario piped à tee commander

#!/usr/bin/python

from sys import exit,exc_info
from time import sleep

try:
        print "hello"
        #raise KeyboardInterrupt
        while True:
                print "hello"
                sleep(1)

except KeyboardInterrupt:
        print "Key board Interrupt"
        exit(0)

Disons que je l'ai stocké dans file.py

Maintenant si j'exécute:

./file.py | tee somefile

Maintenant, appuyez sur Ctrl+C, observez rien n'est imprimé dans le somefile et stdout

Sous exécution normale:

./file.py

Sur Ctrl+C:

 hello
 hello
 ^CKey board Interrupt

La redirection de fichier fonctionne également correctement. Quel est le problème avec tee


0
2018-02-11 06:40


origine




Réponses:


Rien ne va pas avec tee. Python tamponne la sortie s'il détecte qu'il n'écrit pas dans un TTY. Voir cet article Unix & Linux. Utilisation sys.stdout.flush() pour forcer le rinçage du tampon.


2
2018-02-11 08:17



En Python 3, vous pouvez utiliser print('hello', flush=True) - Thomas Ahle