obtenez de sortie à partir d'un paramiko ssh exec_command en permanence
Je suis de l'exécution d'une longue durée d'exécution d'un script python via ssh sur une machine distante en utilisant paramiko. Fonctionne comme un charme, pas de problèmes jusqu'à présent.
Malheureusement, la sortie standard (stdout) (respectivement le stderr) sont affichés uniquement lorsque le script est terminé! Cependant, en raison du temps d'exécution, je préfèrerais à la sortie de chaque nouvelle ligne comme il est imprimé, pas par la suite.
remote = paramiko.SSHClient()
remote.set_missing_host_key_policy(paramiko.AutoAddPolicy())
remote.connect("host", username="uname", password="pwd")
# myScript produces continuous output, that I want to capture as it appears
stdin, stdout, stderr = remote.exec_command("python myScript.py")
stdin.close()
for line in stdout.read().splitlines():
print(line)
Comment cela peut-il être atteint? Remarque: bien sûr, on peut rediriger la sortie vers un fichier et 'moins' ce fichier via une autre session ssh, mais c'est très moche et j'ai besoin d'un nettoyeur, idéalement pythonic solution 🙂
OriginalL'auteur Lukas N.P. Egger | 2015-08-05
Vous devez vous connecter pour publier un commentaire.
Comme spécifié dans le lire([size]), la documentation, si vous ne spécifiez pas un
size
, il lit jusqu'à ce que les expressions du FOLKLORE, qui rend le script attendre jusqu'à ce que la commande se termine avant le retour deread()
et l'impression de tout sortie.Vérifier cela répond: Comment faire une boucle jusqu'à ce que EOF en Python? et Comment faire un "Tout pas EOF" pour des exemples sur la façon d'épuiser le Fichier objet semblable.
for line in iter(lambda: stdout.readline(2048), ""): print(line, end="")
... a fait le tour!OriginalL'auteur KurzedMetal
J'ai été confronté à un problème similaire. J'ai été en mesure de le résoudre en ajoutant get_pty=True pour paramiko:
Ma meilleure supposition est "get pseudo terminal"
OriginalL'auteur James Shrum
Minimale de travail complet exemple d'utilisation de cette réponse (testé en Python 3.6.1)
et
exécuter sur la machine locale avec
pouvez-vous être plus précis sur ce qui exactement ne fonctionne pas?
OriginalL'auteur Jorge Leitão