Me gustaría hacer un script para subir un archivo a FTP.
¿Cómo funcionaría el sistema de inicio de sesión? Estoy buscando algo como esto:
ftp.login=(mylogin)
ftp.pass=(mypass)
Y cualquier otra credencial de inicio de sesión.
Use ftplib
, puede escribirlo así:
import ftplib
session = ftplib.FTP('server.address.com','USERNAME','PASSWORD')
file = open('kitten.jpg','rb') # file to send
session.storbinary('STOR kitten.jpg', file) # send the file
file.close() # close file and FTP
session.quit()
Úselo ftplib.FTP_TLS
en su lugar si su servidor FTP requiere TLS.
Para recuperarlo, puede utilizar urllib.retrieve
:
import urllib
urllib.urlretrieve('ftp://server/path/to/file', 'file')
EDITAR :
Para averiguar el directorio actual, use FTP.pwd()
:
FTP.pwd (): Devuelve la ruta del directorio actual en el servidor.
Para cambiar el directorio, use FTP.cwd(pathname)
:
FTP.cwd (nombre de ruta): establece el directorio actual en el servidor.
print ftp.pwd()
le mostrará la ruta actual en la que se encuentra.ftplib ahora admite administradores de contexto, así que supongo que se puede hacer aún más fácil
from ftplib import FTP from pathlib import Path file_path = Path('kitten.jpg') with FTP('server.address.com', 'USER', 'PWD') as ftp, open(file_path, 'rb') as file: ftp.storbinary(f'STOR {file_path.name}', file)
No es necesario cerrar el archivo o la sesión
fuente
Lo más probable es que desee utilizar el módulo ftplib para python
import ftplib ftp = ftplib.FTP() host = "ftp.site.uk" port = 21 ftp.connect(host, port) print (ftp.getwelcome()) try: print ("Logging in...") ftp.login("yourusername", "yourpassword") except: "failed to login"
Esto lo conecta a un servidor FTP. Lo que hagas a partir de ahí depende de ti. Su pregunta no indica ninguna otra operación que realmente deba realizarse.
fuente
Prueba esto:
#!/usr/bin/env python import os import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('hostname', username="username", password="password") sftp = ssh.open_sftp() localpath = '/home/e100075/python/ss.txt' remotepath = '/home/developers/screenshots/ss.txt' sftp.put(localpath, remotepath) sftp.close() ssh.close()
fuente
SSHException: Error reading SSH protocol banner" when using ProxyCommand
error al seguir esta ruta en ftp.Acabo de responder una pregunta similar aquí en mi humilde opinión, si su servidor FTP puede comunicarse con Fabric, por favor, envíenos a Fabric. Es mucho mejor que hacerlo crudo
ftp
.Tengo una cuenta FTP de, por
dotgeek.com
lo que no estoy seguro de si funcionará con otras cuentas FTP.#!/usr/bin/python from fabric.api import run, env, sudo, put env.user = 'username' env.hosts = ['ftp_host_name',] # such as ftp.google.com def copy(): # assuming i have wong_8066.zip in the same directory as this script put('wong_8066.zip', '/www/public/wong_8066.zip')
guarde el archivo como
fabfile.py
y ejecútelofab copy
localmente.yeukhon@yeukhon-P5E-VM-DO:~$ fab copy2 [1.ai] Executing task 'copy2' [1.ai] Login password: [1.ai] put: wong_8066.zip -> /www/public/wong_8066.zip Done. Disconnecting from 1.ai... done.
Una vez más, si no desea ingresar la contraseña todo el tiempo, simplemente agregue
env.password = 'my_password'
fuente
While the SFTP protocol (which put uses)
enlacePara evitar el error de cifrado, también puede probar los siguientes comandos
ftp = ftplib.FTP_TLS("ftps.dummy.com") ftp.login("username", "password") ftp.prot_p() file = open("filename", "rb") ftp.storbinary("STOR filename", file) file.close() ftp.close()
ftp.prot_p () asegúrese de que sus conexiones estén encriptadas
fuente
Puede utilizar la siguiente función. Aún no lo he probado, pero debería funcionar bien. Recuerde que el destino es una ruta de directorio donde la fuente es la ruta completa del archivo.
import ftplib import os def uploadFileFTP(sourceFilePath, destinationDirectory, server, username, password): myFTP = ftplib.FTP(server, username, password) if destinationDirectory in [name for name, data in list(remote.mlsd())]: print "Destination Directory does not exist. Creating it first" myFTP.mkd(destinationDirectory) # Changing Working Directory myFTP.cwd(destinationDirectory) if os.path.isfile(sourceFilePath): fh = open(sourceFilePath, 'rb') myFTP.storbinary('STOR %s' % f, fh) fh.close() else: print "Source File does not exist"
fuente
myFTP.storbinary('STOR %s' % f, fh)
lo que es% f
?