我有一堆代码如下:
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
有没有可能这样上传,而不必把文件写出来?
你在找什么?(doc page)
SFTPClient
的get()
和put()
函数采用路径而不是文件句柄,这使事情有点尴尬。您可以为
paramiko.SFTPClient
编写一个包装器,以提供所需的功能。以下是我未经测试的最佳尝试:
如果可以工作,
get
和put
函数现在应该使用本地文件句柄而不是路径。我所要做的就是从路径中删除打开文件的代码,并将获取文件大小的代码更改为使用
os.fstat
,而不是os.stat
。更新从Paramiko1.10开始,您可以使用putfo:
与使用
paramiko.SFTPClient.put
不同,您可以使用paramiko.SFTPClient.open
,这将打开一个类似file
的对象。你可以写信给他。像这样的:请注意,将paramiko数据分为32个KiB块可能是值得的,因为这是SSH协议所能处理的最大块,而无需将其分为多个包。
相关问题 更多 >
编程相关推荐