Python SFTP:使用SFTP将内存流放入远程文件夹,如FTP的storbinary

3 投票
2 回答
6444 浏览
提问于 2025-04-30 22:49

我在用Python的paramiko库。我需要把一个文件通过SFTP传到远程的Linux服务器上(我的开发环境是Windows)。下面是我写的代码(可以正常工作)

import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(HOST, username=USERNAME, password=PASSWORD)
stdin, stdout, stderr = client.exec_command("cd %s; pwd" % PATH)
data = stdout.readlines()
print "Current folder:"
for line in data:
    print (line.rstrip())
sftp = client.open_sftp()
sftp.put(local_path, PATH + '/' + FILE_NAME, confirm = True)

sftp.close() 
client.close()

这个代码运行得很好。不过在调用put()方法时,我需要先把文件保存到本地路径,这样会花费很多时间。

我在想有没有办法像FTP那样,用内存流来进行SFTP传输。用FTP的时候,使用内存流会更快(可以正常工作):

import ftplib
ftp_conn = ftplib.FTP(HOST, USERNAME, PASSWORD)
ftp_conn.cwd(FILE_PATH)
ftp_conn.storbinary('STOR '+posixpath.basename(FILE_PATH), buffer, blocksize=1024)
ftp_conn.close()

非常感谢!

暂无标签

2 个回答

1

你应该可以这样做:

import shutil

with sftp.open("/path/to/remote/file", mode="w") as remote_file:
    shutil.copyfileobj(file_string_io, remote_file)

撰写回答