Sto scrivendo un programma in python su Ubuntu, per eseguire un comando ls -l
su RaspberryPi, connettersi con la rete.Esegui un comando su Remote Machine in Python
Qualcuno può guidarmi su come lo faccio?
Sto scrivendo un programma in python su Ubuntu, per eseguire un comando ls -l
su RaspberryPi, connettersi con la rete.Esegui un comando su Remote Machine in Python
Qualcuno può guidarmi su come lo faccio?
Certo, ci sono diversi modi per farlo!
Diciamo che hai un Raspberry Pi su un host raspberry.lan
e il tuo nome utente è irfan
.
E 'la libreria Python di default che esegue comandi.
È possibile farlo eseguire ssh
e fare tutto ciò che è necessario su un server remoto.
scrat has it covered in his answer. Dovresti assolutamente farlo se non vuoi usare alcuna libreria di terze parti.
È inoltre possibile automatizzare la password o la passphrase immesse utilizzando pexpect
.
paramiko
è una libreria di terze parti che aggiunge il supporto SSH-protocollo, in modo che possa funzionare come uno SSH-client.
Il codice di esempio che la connessione al server, eseguire e afferrare i risultati del comando ls -l
apparirebbe così:
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('raspberry.lan', username='irfan', password='my_strong_password')
stdin, stdout, stderr = client.exec_command('ls -l')
for line in stdout:
print line.strip('\n')
client.close()
È possibile anche ottenere utilizzando fabric
.
Fabric è uno strumento di distribuzione che esegue vari comandi su server remoti.
È spesso utilizzato per eseguire roba su un server remoto, quindi è possibile inserire facilmente la versione più recente dell'applicazione Web, riavviare un server Web e quant'altro con un singolo comando. In realtà, puoi eseguire lo stesso comando su più server, il che è fantastico!
Anche se è stato creato come strumento di distribuzione e gestione remota, è ancora possibile utilizzarlo per eseguire i comandi di base.
# fabfile.py
from fabric.api import *
def list_files():
with cd('/'): # change the directory to '/'
result = run('ls -l') # run a 'ls -l' command
# you can do something with the result here,
# though it will still be displayed in fabric itself.
E 'come digitando cd /
e ls -l
nel server remoto, in modo otterrete la lista delle directory nella cartella principale.
Quindi eseguire nella shell:
fab list_files
Si chiederà un indirizzo del server:
No hosts found. Please specify (single) host string for connection: [email protected]
Una breve nota: è inoltre possibile assegnare un nome utente e una serie proprio nel comando fab
:
fab list_files -U irfan -H raspberry.lan
Oppure potresti inserire un host nella variabile env.hosts
nel tuo fabfile. Here's how to do it.
Poi ti verrà richiesta una password SSH:
[[email protected]] run: ls -l
[[email protected]] Login password for 'irfan':
E poi il comando verrà eseguito con successo.
[[email protected]] out: total 84
[[email protected]] out: drwxr-xr-x 2 root root 4096 Feb 9 05:54 bin
[[email protected]] out: drwxr-xr-x 3 root root 4096 Dec 19 08:19 boot
...
semplice esempio dalla here:
import subprocess
import sys
HOST="www.example.org"
# Ports are handled in ~/.ssh/config since we use OpenSSH
COMMAND="uname -a"
ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
if result == []:
error = ssh.stderr.readlines()
print >>sys.stderr, "ERROR: %s" % error
else:
print result
Fa esattamente quello che si vuole: si connette tramite ssh, esegue il comando, restituisce in uscita. Non è necessaria alcuna libreria di terze parti.
quando uso questo comando = "ls -l", il suo risultato è in una riga, significa non leggibile ma funziona –
@ IrfanGhaffar7 è perché il 'risultato' è una lista, non un stringa. Puoi fare 'print '' .join (result)' per renderlo leggibile. –
Grazie .... è ok ora –
come installarlo –
@ IrfanGhaffar7 è possibile installare la libreria Python di terze parti usando 'pip' o' easy_install'. Quindi sarebbe 'pip install fabric'. Controlla la documentazione (ho collegato sia a fabric che a paramiko doc), ha quickstart e tutorial! –
il mio nome host della macchina remota è 'Pi @ 192.168.2.34' e la password è' raspberrypi'. Come faccio a menzionare queste informazioni su Fabric – Fahadkalis