Estoy usando paramiko en Python. Necesito un archivo SFTP a un cuadro de linux remoto (la plataforma dev es windows). Aquí están los códigos (trabajando)
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()
Esto está funcionando bien. Pero para llamar a put (), necesito guardar el archivo en local_path, lo que lleva mucho tiempo.
Me pregunto si hay una manera de hacer sftp en el flujo de memoria como ftp. Para FTP, es más rápido con el flujo de memoria (en funcionamiento):
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()
¡Muchas gracias!
Respuestas
0 para la respuesta № 1Deberías poder hacer algo como esto:
import shutil
with sftp.open("/path/to/remote/file", mode="w") as remote_file:
shutil.copyfileobj(file_string_io, remote_file)