Как удаленно выполнить процесс с помощью python
Я хочу также подключиться и выполнить процесс на удаленном сервере с помощью python. Я хочу иметь возможность получить код возврата и stderr (если есть) процесса. Кто-нибудь когда-либо делал что-то подобное раньше. Я сделал это с помощью ssh, но я хочу сделать это из python script.
Приветствия.
Ответы
Ответ 1
Ну, вы можете вызвать ssh из python...
import subprocess
ret = subprocess.call(["ssh", "[email protected]", "program"]);
# or, with stderr:
prog = subprocess.Popen(["ssh", "[email protected]", "program"], stderr=subprocess.PIPE)
errdata = prog.communicate()[1]
Ответ 2
Используйте 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()
UPDATE: пример используется для использования модуля ssh
, но теперь он устарел, а paramiko - это современный модуль, предоставляющий ssh функциональность в python.
Ответ 3
Возможно, если вы хотите обернуть гайки и болты вызовов ssh, вы можете использовать Fabric
Эта библиотека ориентирована на развертывание и управление сервером, но также может быть полезна для таких проблем.
Также посмотрите Celery. Это реализует очередь задач для Python/Django для разных брокеров. Может быть, избыток вашей проблемы, но если вы собираетесь называть больше функций на нескольких машинах, это избавит вас от головной боли, управляющей вашими подключениями.
Ответ 4
Я думаю, вы найдете ssh_decorate полезный
Команды Python будут запускаться на вашем удаленном сервере с помощью этого простого декоратора:
from ssh_decorate import ssh_connect
ssh=ssh_connect('user','password','server')
#Run a python function
@ssh
def python_pwd():
import os
return os.getcwd()
print (python_pwd())