Подтвердить что ты не робот

Как удаленно выполнить процесс с помощью python

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

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

4b9b3361

Ответ 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())