我有一堆看起来像这样的代码:

with tempfile.NamedTemporaryFile() as tmpfile:
    tmpfile.write(fileobj.read()) # fileobj is some file-like object
    tmpfile.flush()
    try:
        self.sftp.put(tmpfile.name, path)
    except IOError:
        # error handling removed for ease of reading
        pass

是否可以执行这样的上载而不必将文件写到某个地方?

最佳答案

更新从Paramiko 1.10开始,您可以使用putfo:

self.sftp.putfo(fileobj, path)

除了使用paramiko.SFTPClient.put之外,您还可以使用paramiko.SFTPClient.open,它会打开一个类似于file的对象。您可以写。像这样的东西:
f = self.sftp.open(path, 'wb')
f.write(fileobj.read())
f.close()

请注意,以32 KiB块的形式提供paramiko数据可能是值得的,因为这是SSH协议(protocol)可以处理的最大块,而不会将其分成多个数据包。

关于python - 使用Paramiko上传类似文件的对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5914761/

10-14 17:35