Подтвердить что ты не робот

Как изменить каталоги с помощью Paramiko?

Команды Drush, не выполняющиеся с использованием Paramiko

Я отправил вышеупомянутый вопрос относительно постоянного сообщения об ошибке, которое я получаю, используя Paramiko. Я не думаю, что это связано с моим следующим вопросом, но это может быть.

Я могу успешно подключиться к своему серверу через SSH, используя Paramiko. Я могу выполнять команды, такие как ls или pwd. То, что я не могу сделать, это изменить каталоги. Я могу, например, отправить команду "cd..", но когда я получаю "pwd", это показывает, что я не менял каталоги. Это просто перечисляет начальный каталог, в котором я нахожусь, когда я вхожу.

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

Я неправильно понимаю, что здесь происходит? Должен ли я быть в состоянии изменить каталоги? Или, если я могу, я должен делать это не так, как exec_command?

4b9b3361

Ответ 1

Этот парень понял: http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/

Вам просто нужно отправить несколько команд с помощью одного exec_command, например:

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

Затем stdout.readlines() вернет каталог, который вы изменили.

Ответ 2

Начиная с версии 2.1+, метод изменения каталогов sftp.chdir('path/to/directory')

Ответ 3

Ну парамико создает экземпляр оболочки, и все команды, которые вы хотите выполнить в paramiko, должны быть предоставлены только в этом экземпляре оболочки.

Например: Скажем, у меня есть папка в каталоге, в котором я находится.

folder1
folder2
folder3

Теперь, если я хочу записать cd в папку 1 и создать каталог, я бы сделал это:

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

если вы напишете его так:

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

вы получите результат, например

folder1
folder2
folder3
folder4

поскольку это были два разных экземпляра оболочки и были бы независимы в их функции.

Ответ 4

Немного поздно с этим, но его можно "invoke_shell" и записать на стандартный ввод через файл.

Пожалуйста, смотрите: fooobar.com/info/173908/...

Кажется немного тяжеловесом, так как вы можете просто ";" присоединиться к (cmdlist) и отправить команду exec_command.