2017-08-24 1 views
0

J'ai besoin d'exécuter 2 commandes sur une machine distante (Ubuntu Maté 16,04) via SSH en utilisant un script Python.Python: Comment exécuter plus de 1 commande sur SSH sans vous reconnecter à chaque commande

run_pigpiod_remote exécute un démon sur une RPi à distance, comme il est indiqué de # Line0 dans le code ci-dessous. # Line1 établit un lien SSH et exécute le démon pigpiod selon les besoins.

Afin de vérifier l'exécution réussie, je souhaite utiliser pgrep -x pigpiod comme indiqué dans # Line2. Comme # Line2 est écrit, je dois entrer à nouveau le mot de passe.

Comment puis-je éviter d'entrer le mot de passe tant de fois (entrée SSH, en cours d'exécution sudo, et 3 pour # Line2)

def run_pigpiod_remote(adress): 
    if ip[0]==adress: 
     print(adress,"is a local machine") 
     run_pigpiod_local() 
    else: #Line0 
     print(adress," is a remote machine") 
     result = subprocess.run(['ssh','-t','[email protected]'+adress,'sudo','pigpiod']) #Line1 
     result2 = subprocess.run(['ssh','-t','[email protected]'+adress, "pgrep -x ", "pigpiod"]) #Line2 

Répondre

1

Essayez cette

subprocess.run(['ssh','-t','[email protected]'+adress,'sudo pigpiod && pgrep -x pigpiod']) 
+0

OK! ça fonctionne bien. C'est une bonne façon de le résoudre. Comment puis-je retirer le PID (pas seulement sur l'écran)? ce code de manière confirmera une exécution réussie. –

+2

Essayez subprocess.check_output. https://docs.python.org/3.6/library/subprocess.html#subprocess.check_output Si votre ssh affiche quelque chose, vous pouvez vérifier la sortie et valider le succès de commande. – BoboDarph