如何使用Paramiko更改目录?

Mik*_*yan 38 python unix paramiko

Drush命令没有使用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']
>>>
Run Code Online (Sandbox Code Playgroud)

我误解了这里发生了什么吗?我应该无法更改目录吗?或者如果我可以,我应该以除了使用exec_command之外的其他方式来做这件事吗?

-

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

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

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

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

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

Mik*_*yan 38

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

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

myssh.exec_command('cd ..; pwd')
Run Code Online (Sandbox Code Playgroud)

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

  • 我尝试使用一个 exec_command 发送多个命令,例如 "ssh.exec_command('cd /usr/soumya/PGMS/;pwd')" ,但它不起作用。因此,我尝试打印 stderr 输出,如下所示:['bash: line 0: cd: /usr/soumya/PGMS/: No such file or directory\n']。输出显示它仍然在 root 中。"['/root\n']" (2认同)

jar*_*ett 6

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


Akl*_*ain 5

好了,paramiko创建了一个shell实例,而您希望在paramiko中执行的所有命令仅在该shell实例中给出。

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

folder1
folder2
folder3
Run Code Online (Sandbox Code Playgroud)

现在,如果我想光盘进入文件夹1并建立目录,我将要做的是:

ssh.exec_command('cd folder1;mkdir folder4')
Run Code Online (Sandbox Code Playgroud)

如果你这样写:

ssh.exec_command('cd folder1')
ssh.exec_command('mkdir folder4')
Run Code Online (Sandbox Code Playgroud)

你会得到像

folder1
folder2
folder3
folder4
Run Code Online (Sandbox Code Playgroud)

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