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?
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é.
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')
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.
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.