#1 Le 28/09/2011, à 21:24
- ®om
[Résolu] Problème avec un "pipe" bash et python
Bonjour,
e n'arrive pas à m'expliquer un comportement. La commande suivante :
(echo bonjour && sleep 5 && echo au revoir) | cat
affiche bien bonjour dans le terminal, attend 5 seconde et affiche au revoir. Le fichier est également rempli correctement.
Tout va bien.
Maintenant, quasiment la même chose, mais en python. Créer un fichier test.py contenant :
#!/usr/bin/env python
import time
print 'bonjour'
time.sleep(5)
print 'au revoir'
et le rendre exécutable :
chmod +x test.py
./test.py
exécute la commande comme il faut, en affichant d'abord bonjour, puis au revoir.
Maintenant :
./test.py | cat
Tout est écrit "à la fin", bonjour n'est pas écrit aussitôt, mais seulement après les 5 secondes.
C'est comme si python détectait qu'il était branché sur un pipe, et adaptait son comportement (la bufferisation).
Comment éviter cela ?
Merci de votre aide.
Dernière modification par ®om (Le 28/09/2011, à 21:31)
Hors ligne
#2 Le 28/09/2011, à 21:27
- sputnick
Re : [Résolu] Problème avec un "pipe" bash et python
Ça ressemble à de la bufferisation, voir ce thread http://stackoverflow.com/questions/8816 … he-program
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 28/09/2011, à 21:31
- ®om
Re : [Résolu] Problème avec un "pipe" bash et python
Ça ressemble à de la bufferisation, voir ce thread http://stackoverflow.com/questions/8816 … he-program
Ah oui effectivement.
Une solution est alors de lancer le programme avec l'option -u de python. Soit ici :
#!/usr/bin/python -u
Soit en lançant le programme
python -u bonjour.py | cat
Merci ;-)
Hors ligne
#4 Le 29/09/2011, à 11:33
- AnsuzPeorth
Re : [Résolu] Problème avec un "pipe" bash et python
Bjr,
Et en faisant un sys.stdout.flush() après les print ?
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne