【问题标题】:Paramiko get() raises IOError "No such file" if server doesn't support df -hi如果服务器不支持 df -hi,Paramiko get() 会引发 IOError "No such file"
【发布时间】:2012-06-27 05:47:44
【问题描述】:

我遇到了 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 的同一用户)我可以获取文件。有什么想法吗?

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

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

这个错误来自 2009 年,并没有被关闭(但我使用的是最新的 paramiko 1.7.7.1)。有人知道解决方法吗?我可以强制 paramiko 只做与普通 sftp get 等效的操作,而不尝试检查文件完整性吗?

【问题讨论】:

    标签: python sftp paramiko


    【解决方案1】:

    这可能最终会在某个时候调用stat(),但您可以尝试使用返回SFTPFile 实例的STFPClient.open()。然后调用它的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()
    

    【讨论】:

    • 这行不通,很遗憾。 open() 以及除了listdir() 之外的几乎所有方法都会触发相同的错误
    • 到底哪里失败了?请发布回溯。你确定失败在SFTPClient.stat()
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      相关资源
      最近更新 更多