2011-07-04 22 views
8

Tengo que hacer un trabajo (usando mi servidor web) en una máquina remota que demora unos 10 minutos.Módulo SSH para python

He usado pxssh módulo en python para el mismo pero me da "error de tiempo de espera" (sin bloqueo).

Ahora, estoy usando paramiko pero eso vuelve tan pronto como da las instrucciones.

Quiero que el servidor web espere hasta que se complete el trabajo. ¿Hay algún módulo python SSH disponible para esto?

O

podemos lograr el mismo cambiando los ajustes de configuración de pxssh o paramiko?

Respuesta

9

Usted puede utilizar el método recv_exit_status en el canal que esperar a que se complete el comando:

recv_exit_status (auto)

devolver el estado de salida del proceso en el servidor. Esto es principalmente útil para recuperar los bugs de un exec_command. Si el comando aún no ha terminado, este método esperará hasta que lo haga, o hasta que se cierre el canal. Si el servidor no proporciona un estado de salida, se devuelve -1.

Por ejemplo:

ssh = paramiko.SSHClient() 
ssh.connect(remote, username=username, password=password) 
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("some command") 
exit_status = ssh_stdout.channel.recv_exit_status() 
+0

ssh_stdout no es un objeto de canal, pero ChannelFile, que no soporta el método recv_exit_status. – emish

+0

@emish: el atributo 'channel' en' ChannelFile' es un objeto 'Channel', que es como el código de ejemplo invoca el método' recv_exit_status'. – ars

+0

El enlace está roto. – ray