J'utilise un script pour gérer les processus sur une machine distante (SSH). Appelons-le five.pySortie de scripts python affichés uniquement à la fin lors de l'utilisation de SSH?
#!/usr/bin/python
import time, subprocess
subprocess.call('echo 0',shell=True)
for i in range(1,5):
time.sleep(1)
print(i)
Si je maintenant exécuter
ssh [email protected] five.py
Je voudrais voir la sortie
0
1
2
3
4
apparaissent sur ma sortie standard seconde par seconde (comme c'est ce qui se passe si vous exécutez localement). Ce qui se passe est: j'obtiens le 0 de "echo" tout de suite et le reste n'apparait qu'après la fin du programme entier. (Cela n'aide pas à imbriquer 'five.py' dans un script bash, à l'appeler par 'python five.py', ou à utiliser 'print >> sys.stdout, i').
Cela doit être lié au python ainsi écrit à stdout, puisque d'autres programmes se comportent tout à fait normal .. Une solution fonctionnelle est
import time, subprocess
import sys
subprocess.call('echo 0',shell=True)
for i in range(1,5):
time.sleep(1)
sys.stdout.write(str(i)+'\n')
sys.stdout.flush()
Mais il doit y avoir une meilleure solution que de changer toutes mes déclarations d'impression!
Merci beaucoup: 'sys.stdout = os.fdopen (sys.stdout.fileno(),' w ', 1)' fonctionne très bien et devrait être plus sûr que 'python -u' –