2012-01-19 15 views
25

Drush commands not executing using Paramiko¿Cómo cambio directorios usando Paramiko?

Publiqué la pregunta anterior con respecto a un mensaje de error persistente que recibo usando Paramiko. No creo que esté relacionado con mi próxima pregunta, pero podría ser.

Puedo conectarme exitosamente a mi servidor a través de SSH usando Paramiko. Puedo ejecutar comandos como ls o pwd. Lo que aparentemente no puedo hacer es cambiar directorios. Puedo enviar el comando "cd .." por ejemplo, pero cuando hago un seguimiento con "pwd", muestra que no he cambiado los directorios. Simplemente muestra el directorio inicial que estoy en al iniciar sesión.

>>> stdin, stdout, stderr = myssh.exec_command("pwd") 
>>> stdout.readlines() 
['/big/dom/home/myid\n'] 
>>> stdin, stdout, stderr = myssh.exec_command("cd ../") 
>>> stdout.readlines() 
[] 
>>> stdin, stdout, stderr = myssh.exec_command("pwd") 
>>> stdout.readlines() 
['/big/dom/home/myid\n'] 
>>> 

Am I malentendido lo que está pasando aquí? ¿No debería ser capaz de cambiar directorios? O si puedo, ¿debería hacerlo de alguna otra forma que no sea usando exec_command?

-

No puedo responder a mi propia pregunta por otros 7 horas, así que aquí está la respuesta:

Este tipo tenía todo resuelto: http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/

Sólo tienes que enviar múltiples comandos con una exec_command, tales como:

myssh.exec_command ('cd ..; pwd')

Entonces stdout.readlines() se devuelve el directorio al que cambiaste.

+0

Posible duplicado de [¿Cómo se ejecutan varios comandos en una sola sesión en Paramiko? (Python)] (https://stackoverflow.com/questions/6203653/how-do-you-execute-multiple-commands-in-a-single-session-in-paramiko-python) – tripleee

Respuesta

25

Este tipo había dado cuenta de que: http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/

Sólo tienes que enviar varios comandos con sólo exec_command, tales como:

myssh.exec_command('cd ..; pwd') 

Entonces stdout.readlines() devolverá el directorio que ha cambiado a.

+0

Intenté enviar varios comandos con un exec_command como "ssh.exec_command ('cd/usr/soumya/PGMS /; pwd')", pero no funciona. Por lo tanto he intentado imprimir la salida stderr y es como sigue: [ 'bash: la línea 0: cd:/usr soumya// PROGMS /: No existe el fichero o directorio \ n']. El resultado muestra que aún está en la raíz. "['/ root \ n']" –

0

Un poco tarde con esto, pero es posible 'invoke_shell' y escribir en la entrada estándar a través de un archivo.

Por favor, vea: https://stackoverflow.com/a/6203877/1861353

parece un poco pesado poco ya que puede simplemente ';' join (cmdlist) y enviar a la exec_command..

3

partir de la versión 2.1 + el método para cambiar de directorio es sftp.chdir('path/to/directory')

1

Bueno paramiko crea una instancia de concha y todos los comandos que desea ejecutar en paramiko tendrá que ser presentada en la misma instancia de única carcasa.

Por ejemplo: Digamos que tengo alguna carpeta en el directorio en el que me encuentro.

folder1 
folder2 
folder3 

Ahora si quiero CD en la carpeta 1 y hago un directorio existe lo que haría es:

ssh.exec_command('cd folder1;mkdir folder4') 

si usted lo escribe como:

ssh.exec_command('cd folder1') 
ssh.exec_command('mkdir folder4') 

que se obtendría el resultado como

folder1 
folder2 
folder3 
folder4 

como ésos eran dos instancias diferentes del shell y serían independientes en su función.