如果服务器不支持df -hi,Paramiko get()会引发IOError“没有这样的文件”

时间:2012-06-25 22:37:01

标签: python sftp paramiko

当我尝试从远程服务器上获取文件时,我遇到了paramiko的问题,它给了我IOError: [Errno 2] No such file。这是我的代码:

# set up a transport object t (using an rsa key), which connected successfully
>>> t.is_active()
True
>>> sftp = paramiko.SFTPClient.from_transport(t)
>>> files = sftp.listdir()  # files holds the list ['canceled', 'downloaded', 'FILE.06222012.TXT']
>>> sftp.get(files[2], '.')
IOError: [Errno 2] No such file

但是,当我在命令行上连接到sftp时(因为我打开了python repl的同一个用户),我可以获取该文件。有什么想法吗?

编辑:我发现这篇文章似乎是我遇到的问题https://bugs.launchpad.net/paramiko/+bug/492238在交互式sftp提示中:

sftp> df -hi
Server does not support statvfs@openssh.com extension

此错误是从2009年开始的,并未关闭(但我使用的是最新的paramiko 1.7.7.1)。有人知道解决方法吗?我可以强制paramiko只做相当于普通的sftp get,而不试图检查文件的完整性吗?

2 个答案:

答案 0 :(得分:0)

这可能最终会在某个时刻调用stat(),但您可以尝试使用返回STFPClient.open()实例的SFTPFile。然后调用其read()方法来获取文件的内容。所以,像这样:

sftp = paramiko.SFTPClient.from_transport(t)
files = sftp.listdir()  # files holds the list ['canceled', 'downloaded', 'FILE.06222012.TXT']
remote_file = sftp.open(files[2])
with open(files[2], 'w') as local_file:
    local_file.write(remote_file.read())
remote_file.close()

答案 1 :(得分:0)

我有同样的问题,但是,由于sftp和df,我没有遇到问题。确保为 localpath 提供正确的文件名!

sftp.get(files[2],'file2.txt')