6
votes

Sortie des scripts Python affichés uniquement à la terminaison lors de l'utilisation de SSH?

Je suis un script pour gérer les processus sur une machine distante (SSH). Appelons-le cinq.py xxx

si je fonctionne maintenant xxx

je voudrais voir la sortie xxx

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 ').

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 xxx

mais il doit y avoir une meilleure solution que de changer tout mon Déclarations d'impression!


0 commentaires

3 Réponses :


0
votes

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)


0 commentaires

7
votes

Vous pouvez ajouter le -u sur la ligne Shebang lorsque Interjay aspiré xxx pré>

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


1 commentaires

Merci beaucoup: 'sys.stdout = os.fdopen (sys.stdout.fileno (),' w ', 1)' fonctionne très bien et devrait être plus sécurisé que 'Python -u'



0
votes

Une chose que vous pouvez regarder utiliser depuis que vous utilisez déjà Python est Paramiko , beaucoup plus agréable façon de faire du travail de SSH distant. Voici un article sur comment je Je l'utilise sous sa forme la plus élémentaire.


0 commentaires