如何使用Paramiko更改目录?

时间:2012-01-19 20:33:29

标签: python unix paramiko

Drush commands not executing using Paramiko

我发布了上述有关使用Paramiko收到的持久性错误消息的问题。我不认为这与我的下一个问题有关,但可能是。

我可以使用Paramiko通过SSH成功​​连接到我的服务器。我可以执行像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之外的其他方式进行吗?

-

我再过7个小时无法回答我自己的问题,所以答案是:

这家伙弄明白了:http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/

您只需使用一个exec_command发送多个命令,例如:

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

然后stdout.readlines()将返回您更改为的目录。

4 个答案:

答案 0 :(得分:36)

这家伙弄明白了:http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/

您只需使用一个exec_command发送多个命令,例如:

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

然后stdout.readlines()将返回您更改为的目录。

答案 1 :(得分:4)

从版本2.1+开始,更改目录的方法是 sftp.chdir('path/to/directory')

答案 2 :(得分:4)

好的paramiko创建了一个shell实例,你希望在paramiko中执行的所有命令都只能在shell的实例中给出。

例如: 我们假设我在目录中有一些文件夹。

folder1
folder2
folder3

现在,如果我想要进入文件夹1并在那里创建一个目录,我会做的是:

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

如果你这样写:

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

你会得到像

这样的结果
folder1
folder2
folder3
folder4

因为它们是shell的两个不同实例,并且在功能上是独立的。

答案 3 :(得分:2)

这个有点晚了,但可以'invoke_shell'并通过文件写入标准输入。

请参阅: https://stackoverflow.com/a/6203877/1861353

似乎有点重量级,因为你可以';'。join(cmdlist)并发送到exec_command。