Je suis un script pour gérer les processus sur une machine distante (SSH). Appelons-le cinq.py strud> si je fonctionne maintenant p> je voudrais voir la sortie p> apparaît sur mon standard de seconde par seconde (comme s'il est exécuté localement) .. Que se passe-t-il est: je reçois le 0 "Echo" tout de suite et le reste seulement apparaît à la fois après la fin du programme complet. (Ne vous aide pas à nier 'cinq.py' dans un script Bash; l'appeler par 'python cinq.py'; ou utiliser "imprimé >> sys.stdout, i '). P> Ceci doit être lié à la façon dont Python écrit à STDOUT, car d'autres programmes se comportent assez normaux. Une solution de contournement fonctionnelle est p> mais il doit y avoir une meilleure solution que de changer tout mon Déclarations d'impression! p> p>
3 Réponses :
Vous pouvez remplacer l'objet sys.stsdout code> de sorte qu'il glisse automatiquement après chaque écriture. Cela affectera également l'instruction
impression code>. Un exemple de Cette réponse :
class flushfile(object):
def __init__(self, f):
self.f = f
def write(self, x):
self.f.write(x)
self.f.flush()
import sys
sys.stdout = flushfile(sys.stdout)
Vous pouvez ajouter le -u sur la ligne Shebang lorsque Interjay aspiré vous pouvez également rouvrir le stdout avec la mise hors service éteint ou réglé sur la mise en mémoire tampon de ligne p> import os,sys
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) # no buffering
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 1) # line buffering
Merci beaucoup: 'sys.stdout = os.fdopen (sys.stdout.fileno (),' w ', 1)' fonctionne très bien et devrait être plus sécurisé que 'Python -u'