web-dev-qa-db-fra.com

Comment changer de répertoire en utilisant Paramiko?

Les commandes Drush ne s'exécutent pas en utilisant Paramiko

J'ai posté la question ci-dessus concernant un message d'erreur persistant que je reçois en utilisant Paramiko. Je ne pense pas que cela soit lié à ma prochaine question, mais c'est possible.

Je peux me connecter avec succès à mon serveur via SSH en utilisant Paramiko. Je peux exécuter des commandes comme ls ou pwd. Ce que je n'arrive pas à faire, c'est de changer de répertoire. Je peux envoyer la commande "cd .." par exemple, mais quand je poursuis avec "pwd" cela montre que je n'ai pas changé de répertoire. Il répertorie simplement le répertoire initial dans lequel je me trouve lorsque je me connecte.

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

Suis-je en train de mal comprendre ce qui se passe ici? Dois-je ne pas pouvoir changer de répertoire? Ou si je le peux, dois-je le faire autrement qu'en utilisant exec_command?

39
Mike Ryan

Ce gars l'a fait comprendre: http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/

Il vous suffit d'envoyer plusieurs commandes avec une seule commande exec_, telles que:

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

Ensuite, stdout.readlines () renverra le répertoire dans lequel vous avez changé.

38
Mike Ryan

Depuis la version 2.6, si vous utilisez SFTPClient, la méthode pour changer de répertoire est sftp = myssh.open_sftp() sftp.chdir('path/to/directory')

6
jarriett

Eh bien, paramiko crée une instance de Shell et toutes les commandes que vous souhaitez exécuter dans paramiko doivent être données dans cette instance de Shell uniquement.

Par exemple: disons que j'ai un dossier dans le répertoire où je me trouve.

folder1
folder2
folder3

Maintenant, si je veux cd dans le dossier 1 et y faire un répertoire, je ferais ceci:

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

si vous l'écrivez comme:

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

vous obtiendriez le résultat comme

folder1
folder2
folder3
folder4

car il s'agissait de deux instances différentes de Shell et elles seraient indépendantes dans leur fonction.

6
Aklank Jain

Un peu en retard avec celui-ci, mais il est possible d '"invoquer_Shell" et d'écrire sur l'entrée standard via un fichier.

Veuillez voir: https://stackoverflow.com/a/6203877/186135

Semble un peu lourd car vous pouvez simplement ';'. Join (cmdlist) et envoyer à la commande exec_command.

2
CodeMode