2010-09-17 3 views
2

J'ai un programme qui saisit des données via ssh en utilisant paramiko:Comment supprimer des lignes de stdout en python?

ssh = paramiko.SSHClient() 

ssh.connect(main.Server_IP, username=main.Username, password=main.Password) 

ssh_stdin_host, ssh_stdout_host, ssh_stderr_host =ssh_session.exec_command(setting.GetHostData) 

Je voudrais enlever les 4 premières lignes de ssh_stdout_host. J'ai essayé d'utiliser StringIO pour utiliser des readlines comme ceci:

output = StringIO("".join(ssh_stdout_host)) 
data_all = output.readlines() 

Mais je suis perdu après ça. Quelle serait une bonne approche? Im en utilisant Python 2.6.5. Merci.

Répondre

2

readlines fournit toutes les données

allLines = [line for line in stdout.readlines()] 
data_no_firstfour = "\n".join(allLines[4:]) 
+0

Google pour "syntaxe de liste de python" pour tous les trucs cool que vous pouvez faire pour les listes de cette façon. – Powertieke

+0

J'ai aussi utilisé Paramiko et je ne savais pas si stdout.readlines() renvoyait un itérateur ou la liste complète des lignes. La première ligne du code ci-dessus serait superflue si elle renvoie une liste. Mais je suppose que cela fait en sorte que le code ne sera pas en faute. – pyfunc

+0

Merci! Exactement ce que je cherchais. –

3

Comment supprimer les lignes de stdout en python?

(ce qui est une réponse générale pour la suppression des lignes de la sortie standard fenêtre de la console Python, et n'a rien à voir avec la question spécifique impliquant paramiko, ssh, etc.)

voir aussi: here et here

Au lieu d'utiliser la commande print ou la fonction print(), utilisez sys.stdout.write("...") combiné avec sys.stdout.flush(). Pour effacer la ligne écrite, retournez à la ligne précédente et remplacez tous les caractères par des espaces en utilisant sys.stdout.write('\r'+' '*n), où n est le nombre de caractères de la ligne.


un bel exemple dit tout:

import sys, time 

print ('And now for something completely different ...') 
time.sleep(0.5) 

msg = 'I am going to erase this line from the console window.' 
sys.stdout.write(msg); sys.stdout.flush() 
time.sleep(1) 

sys.stdout.write('\r' + ' '*len(msg)) 
sys.stdout.flush() 
time.sleep(0.5) 

print('\rdid I succeed?') 
time.sleep(1) 

modifier au lieu de sys.stdout.write(msg); sys.stdout.flush(), vous pouvez également utiliser

print(msg, end='') 

Pour les versions Python ci-dessous 3.0, mis from __future__ import print_function au haut de votre script/module pour que cela fonctionne.

Notez que cette solution fonctionne pour la fenêtre de console Python stdout, par ex. lancez le script en faisant un clic droit et en choisissant 'open with -> python'. Cela ne fonctionne pas pour SciTe, Idle, Eclipse ou d'autres éditeurs avec des fenêtres de console incorporées. Je m'attends une solution pour cela here.

Questions connexes