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.
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.
Respuestas:
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.
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
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.
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()
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útelo fab 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'
Para 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
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"
myFTP.storbinary('STOR %s' % f, fh)
lo que es % f
?
print ftp.pwd()
le mostrará la ruta actual en la que se encuentra.