我在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(),我需要将文件保存到local_path,这需要很长时间。
我想知道是否有办法像内存流一样在内存流中执行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()
非常感谢!
答案 0 :(得分:1)
你应该可以这样做:
import shutil
with sftp.open("/path/to/remote/file", mode="w") as remote_file:
shutil.copyfileobj(file_string_io, remote_file)
答案 1 :(得分:0)