2009-06-03 26 views
28

Quiero conectarme también y ejecutar un proceso en un servidor remoto usando python. Deseo poder obtener el código de retorno y stderr (si corresponde) del proceso. ¿Alguien ha hecho algo como esto antes? Lo he hecho con ssh, pero quiero hacerlo desde el script de python.Cómo ejecutar un proceso de forma remota usando python

Saludos.

+1

duplicado: http://stackoverflow.com/questions/536370/execute -arbitrary-python-code-remote-can-it-be-done –

+0

Ejemplo: http://stromberg.dnsalias.org/~strombrg/looper/ Se trata de un código abierto con licencia de Microsoft debido a una adquisición. Funciona bien en Linux. – user1277476

Respuesta

23

Bueno, puede llamar a ssh desde pitón ...

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] 
+7

Tendrá que asegurarse de tener una autenticación basada en claves para el host remoto y las claves adecuadas. De lo contrario, se le pedirá una contraseña. – slacy

+0

nice, aparentemente estoy desactualizado - iba a recomendar os.spawnlp, pero veo que se introdujo el módulo de subproceso para reemplazarlo. – klochner

+0

Gracias amigo. Cuando ejecuta un comando sobre ssh, el código de retorno y stderr es el del comando ejecutado, si ssh no tiene ningún problema. Puedo usar la clase popen y el método de comunicación() para acceder desde allí. – stinkypyper

40

Utilice la ssh module called paramiko que fue creado para este propósito en lugar de utilizar subprocess. He aquí un ejemplo a continuación:

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

ACTUALIZACIÓN: El ejemplo utilizado para utilizar el módulo ssh, pero que ahora es obsoleto y paramiko es el módulo de puesta al día que proporciona funcionalidad ssh en Python.

3

Tal vez si desea envolver las tuercas y los pernos de la llama ssh se puede utilizar Fabric Esta biblioteca está orientado a la implementación y administración de servidores, pero también podría ser útil para este tipo de problemas.

También eche un vistazo a Celery. Esto implementa una cola de tareas para Python/Django en varios intermediarios. Tal vez sea un exceso para su problema, pero si va a llamar a más funciones en varias máquinas, le ahorrará muchos dolores de cabeza al administrar sus conexiones.

2

creo que encontrará ssh_decorate útiles

comandos de Python se ejecutan en el servidor remoto con esta simple decorador:

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