2017-07-12 2 views
1

J'ai besoin d'obtenir le nombre de fichiers sur le serveur distant via Python. J'ai utilisé le module paramiko et j'ai écrit le script ci-dessous. La commande linux lors de l'exécution dans le terminal me donne la sortie désirée alors que l'exécution de Python me donne la sortie comme [u'0 \ n ']. Toute aide est très appréciée.script python pour se connecter au serveur distant et compter le nombre de fichiers

#!/usr/local/bin/python 
import paramiko 
client=paramiko.SSHClient() 
client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
client.connect('hostname', username='username') 
grepCommand="ssh [email protected] 'find /usr/local/somefolder1/somefolder2 -type f -exec ls {} \;'|wc -l" 
stdin,stdout,stderr = client.exec_command(grepCommand) 
data=stdout.readlines() 
print data 
client.close() 
+0

il vous donne un bon résultat mais juste pour unicode courir i dans les données; print (i.encode ('ascii', 'replace')) – MacHala

+0

que la première partie de grepCommand est tout à fait fausse, vous êtes déjà connecté à l'hôte via paramiko il est donc inutile de se connecter via ssh une fois de plus – MacHala

Répondre

0

Depuis la bibliothèque paramiko fait déjà la connexion ssh pour vous, vous n'avez pas besoin d'exécuter ssh dans votre commande à distance. Il semble aussi que vous redirigez localement la sortie vers wc .. quelque chose que vous ne pouvez pas faire ici car avec paramiko vous n'utilisez pas un shell local. Donc:

Votre grepCommand devrait être exactement ce qui fonctionnerait si vous deviez l'exécuter dans un shell sur la machine distante.

par exemple:

find /etc -type f | wc -l 
+0

Très apprécié, modifié le code selon les recommandations mais maintenant obtenir la valeur 0 alors qu'il y a 21 fichiers dans le serveur distant. #!/Usr/local/bin/python import paramiko client = paramiko.SSHClient() client.set_missing_host_key_policy (paramiko.AutoAddPolicy()) client.connect ('nom d'hôte', nom d'utilisateur = 'nom d'utilisateur') grepCommand = "'find/usr/local/unfolder1/somefolder2 -type f -exec ls {} \;' wc -l" stdin, stdout, stderr = client.exec_command (grepCommand) data = stdout.readlines() pour i dans les données: print (i.encode ('ascii', 'replace')) client.close() – Arun

+0

Testez la commande que vous exécutez en vous connectant interactivement à la machine distante et en l'exécutant. –

+0

Aussi, êtes-vous absolument sûr que l'utilisateur que vous connectez a des autorisations rx sur le répertoire? Et que votre connexion est réussie? Vérifiez les journaux auth/sshd sur la télécommande pour vous assurer que vous vous connectez. –