如何使用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来实现?
4 个回答
8
从2.6版本开始,如果你使用SFTPClient,改变目录的方法是:
sftp = myssh.open_sftp() // 打开一个SFTP连接
sftp.chdir('path/to/directory') // 切换到指定的目录
10
其实,paramiko会创建一个“命令行”的实例,你想要执行的所有命令都必须在这个“命令行”实例里进行。
举个例子:假设我在当前目录下有一个文件夹。
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
这是因为你使用了两个不同的“命令行”实例,它们的功能是相互独立的。
56
这个家伙找到了办法: http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/
你只需要用一个exec_command发送多个命令,比如:
myssh.exec_command('cd ..; pwd')
然后stdout.readlines()会返回你切换到的目录。