Как выполнить процесс удаленно, используя python - PullRequest
29 голосов
/ 04 июня 2009

Я хочу подключиться и выполнить процесс на удаленном сервере, используя Python. Я хочу иметь возможность получить код возврата и stderr (если есть) процесса. Кто-нибудь когда-либо делал что-то подобное раньше? Я сделал это с помощью ssh, но я хочу сделать это из скрипта Python.

Приветствие.

Ответы [ 3 ]

42 голосов
/ 10 января 2012

Используйте модуль ssh под названием paramiko , который был создан для этой цели, вместо использования subprocess. Вот пример ниже:

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()

ОБНОВЛЕНИЕ: Пример, используемый для использования модуля ssh, но теперь он устарел, а paramiko - это современный модуль, обеспечивающий функциональность ssh в python.

24 голосов
/ 04 июня 2009

Ну, вы можете вызвать ssh из 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]
5 голосов
/ 19 сентября 2012

Может быть, если вы хотите обернуть гайки и болты вызовов ssh, вы можете использовать Fabric Эта библиотека предназначена для развертывания и управления сервером, но она также может быть полезна для решения подобных проблем.

Также взгляните на Сельдерей . Это реализует очередь задач для Python / Django на разных брокерах. Возможно, это излишнее решение вашей проблемы, но если вы собираетесь вызывать больше функций на нескольких машинах, это избавит вас от головной боли при управлении вашими соединениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...