web-dev-qa-db-fra.com

linux tee ne fonctionne pas avec python?

J'ai créé un script python qui communique avec un serveur Web à l'aide d'une boucle infinie. Je veux enregistrer toutes les données de communication dans un fichier et les surveiller à partir du terminal en même temps. J'ai donc utilisé la commande tee comme ça.

python client.py | tee logfile

cependant, je n'ai rien reçu du terminal ni du fichier journal. le script python fonctionne bien. que se passe-t-il ici? est-ce que je manque quelque chose?

quelques conseils seraient appréciés. Merci d'avance.

82
daehee

De man python:

   -u     Force stdin, stdout and stderr to  be  totally  unbuffered.   On  systems
          where it matters, also put stdin, stdout and stderr in binary mode.  Note
          that there is internal buffering in xreadlines(), readlines()  and  file-
          object  iterators  ("for  line  in sys.stdin") which is not influenced by
          this option.  To work around this, you will want to use  "sys.stdin.read‐
          line()" inside a "while 1:" loop.

Vous pouvez donc:

/usr/bin/python -u client.py >> logfile 2>&1

Ou en utilisant tee:

python -u client.py | tee logfile
150
Vor