web-dev-qa-db-fra.com

Comment exécuter un processus à distance en utilisant python

Je veux me connecter et exécuter un processus sur un serveur distant en utilisant Python. Je veux pouvoir obtenir le code retour et stderr (le cas échéant) du processus. Est-ce que quelqu'un a déjà fait quelque chose comme ça avant. Je l'ai fait avec ssh, mais je veux le faire depuis le script Python.

À votre santé.

29
stinkypyper

Eh bien, vous pouvez appeler ssh à partir de python ...

import subprocess
ret = subprocess.call(["ssh", "user@Host", "program"]);

# or, with stderr:
prog = subprocess.Popen(["ssh", "user@Host", "program"], stderr=subprocess.PIPE)
errdata = prog.communicate()[1]
24
sth

Utilisez le module ssh appelé paramiko qui a été créé à cet effet au lieu d'utiliser subprocess. Voici un exemple ci-dessous:

from paramiko import SSHClient
client = SSHClient()
client.load_system_Host_keys()
client.connect("hostname", username="user")
stdin, stdout, stderr = client.exec_command('program')
print "stderr: ", stderr.readlines()
print "pwd: ", stdout.readlines()

MISE À JOUR: L'exemple utilisé pour utiliser le module ssh, mais qui est maintenant obsolète et paramiko est le module à jour qui fournit la fonctionnalité ssh en python.

42
aculich

Peut-être que si vous voulez envelopper les écrous et les boulons des appels ssh, vous pouvez utiliser Fabric Cette bibliothèque est orientée vers le déploiement et la gestion du serveur, mais elle pourrait également être utile pour ce type de problèmes.

Jetez également un œil à Céleri . Cela implémente une file d'attente de tâches pour Python/Django sur différents courtiers. Peut-être une surpuissance pour votre problème, mais si vous allez appeler plus de fonctions sur plusieurs machines, cela vous évitera beaucoup de maux de tête pour gérer vos connexions.

5
RickyA