Lavorare con FTP da Python

Sommario
Pitone È un linguaggio che ci permette di incorporare il lavoro con le diverse funzionalità dei sistemi operativi in ​​modo facile e intuitivo, grazie al gran numero di librerie e documentazione che esistono in rete gratuitamente e ben spiegate.
Uno dei punti di forza di questo linguaggio è il lavoro con i protocolli di rete, tra i quali possiamo citare il FTP e qualcosa di più comune come la posta elettronica, con questo possiamo sviluppare programmi o applicazioni che ci consentono di caricare file su computer remoti in modo automatico se lo desideriamo, il tutto senza la necessità di ricorrere ad altri strumenti al di fuori dell'ecosistema di Pitone.
Il protocollo FTP ci permette di effettuare trasferimenti di file tramite una connessione in rete. Normalmente è il protocollo che usiamo per connetterci in remoto ai server e in questo modo manipolare i file, solitamente il porta 21Tuttavia, questo dipende completamente dal gusto del consumatore, quindi se vediamo un'altra porta, non sorprende che si tratti di un'installazione personalizzata.
Per interagire con questo protocollo abbiamo bisogno di due cose, la prima è un server che è in onda e disponibile per la nostra rete, può essere sulla stessa rete o magari su Internet. La seconda cosa che serve è un client in grado di inviare e ricevere informazioni da detto server, questo client deve avere la capacità di utilizzare le porte specificate dal servizio e l'autenticazione stabilita.
Fai un cliente in Pitone che posso stabilire una connessione FTP Da zero è possibile, tuttavia lo sforzo che ci impiegheremmo sarebbe notevole e alla fine potrebbe essere vano se non abbiamo bisogno di qualcosa di speciale.
Per evitare disagi e sviluppi inutili Pitone ci fornisce una libreria che già ci aiuta con gran parte del lavoro. Stiamo parlando di ftplib, contiene metodi completi e già testati e perfezionati che facilitano la comunicazione utilizzando il protocollo di trasferimento file FTP.
Come usare la libreria?Per usare questa libreria dobbiamo semplicemente includerla nel nostro programma usando l'istruzione importare e poi iniziamo il nostro normale sviluppo. Nell'esempio seguente creeremo un piccolo programma client in grado di connettersi a un server FTP, in questo caso utilizzeremo il servizio kernel.org che è un sito Web Linux e con questo elencheremo i file disponibili.
Scegliamo questo server perché non necessita di autenticazione e ci permette di utilizzare la modalità anonima. Vediamo quindi il codice e poi faremo la spiegazione corrispondente, l'unico requisito di cui abbiamo bisogno è di avere Python 2.7 e connessione Internet:
 #! / usr / bin / env python PATH_FTP_SERVER = 'ftp.kernel.org' import ftplib def client_ftp_connection (server, username, mail): # apri la connessione ftp = ftplib.FTP (server, username, mail) # elenchiamo le file nella directory / pub ftp.cwd ("/ pub") print "File disponibili in% s:"% file server = ftp.dir () print file ftp.quit () if __name__ == '__main__': client_ftp_conexion ( server = FTP_SERVER_PATH, nome utente = 'anonimo', mail='[email protected]',) 

La prima cosa che facciamo è definire una variabile all'interno del file che conterrà il percorso del server FTP a cui vogliamo fare il collegamento, in questo caso è ftp .kernel.org, è da qui che possiamo ottenere informazioni sul kernel Linux.
Il prossimo atto facciamo il importare dalla libreria ftplib suddetto, con questo ci assicuriamo la possibilità di utilizzare tutti i metodi necessari per connetterci al server sopra definito, per questo utilizziamo il metodo FTP dello stesso, lì passeremo il percorso, il nome utente e un'e-mail.
Controllo della connessionePer verificare che la connessione funzioni usiamo il comando cwd per navigare in una directory e poi con dir () Possiamo elencare i file in quella cartella sul server, una volta terminata la nostra procedura chiamiamo il metodo esentato () per terminare la sessione e chiudere la connessione.
Questo codice deve andare in un file con il nome che vogliamo con estensione .py in modo che il nostro interprete Pitone può eseguirlo, per questo nel percorso in cui si trova il nostro file lo eseguiamo con la parola riservata python e il nome del nostro file, che dovrebbe darci qualcosa di simile a quello che vediamo nella schermata seguente:

INGRANDIRE

Sebbene nell'esempio precedente possiamo elencare i file di un server, il che è abbastanza utile per ottenere informazioni da essi, qualcosa di più potente è poter caricare files. Le utilità di questo sono molteplici, possiamo contare, ad esempio, il trasferimento di file derivanti da un'applicazione per l'elaborazione da un'altra, o magari effettuare backup di un computer in un altro che si trova all'interno della rete. Certo, oggi possono esserci soluzioni molto più eleganti, tuttavia non basta poterlo realizzare con un'applicazione che sviluppiamo noi stessi.
RequisitiIl requisito aggiuntivo di cui abbiamo bisogno per questo esercizio è di avere a server FTP locale nella nostra attrezzatura di prova, per questo se abbiamo un sistema Linux che possiamo usare wu-ftp, ma se siamo sulla piattaforma finestre possiamo usare Filezilla Server che è gratuito.
Qualunque sia il server che possiamo utilizzare, dobbiamo avere i permessi o la possibilità di accesso anonimo, comunque nel codice seguente vedremo meglio come possiamo caricare i file.
Dobbiamo creare un utente e un account FTP Nel server locale che creiamo per poter utilizzare questo esempio, funziona anche con server remoti, dobbiamo semplicemente assicurarci di avere le nostre credenziali aggiornate. Quindi possiamo usare il seguente codice:
 #! / usr / bin / env python import os import argparse import ftplib import getpass SERVER_FTP_LOCAL = 'localhost' FILE_TO_UPLOAD = 'example.txt' def upload_ftp (server, nome utente, password, upload_file): print "Connessione al server:% s " % server ftp = ftplib.FTP (server) print" Accesso come: user =% s "% username ftp.login (nome utente, password) ext = os.path.splitext (upload_file) [1] se ext in ( ". txt", ".htm", ".html"): ftp.storlines ("STOR" + upload_file, aperto (upload_file)) else: ftp.storbinary ("STOR" + upload_file, aperto (upload_file, "rb"), 1024) print "File caricato:% s"% upload_file if __name__ == '__main__': parser = argparse.ArgumentParser (description = 'Esempio di caricamento di file FTP') parser.add_argument ('- server', action = "store" , dest = "server", default = SERVER_FTP_LOCAL) parser.add_argument ('- file', action = "store", dest = "file_upload", default = FILE_TO_UPLOAD) parser.add_argument ('- user' , action = "store" , dest = "n user_name ", default = getpass.getuser ()) application_parameters = parser.parse_args () server, upload_file, user_name = application_parameters.server, application_parameters. upload_file, application_parameters.user_name password: password: getpass.getpass la (prompt =") password: getpass.getpass il (prompt = ") upload_ftp (server, nome utente, password, upload_file) 

In questo esempio, oltre a importare la libreria ftplib, importiamo anche librerie tu per poter accedere ai comandi del sistema operativo, utilizziamo inoltre argparsegetpass al fine di elaborare l'utilizzo dei parametri inseriti dall'utente e rendere così più dinamico il nostro programma.
Quindi definiamo un paio di costanti con cui stabiliremo il server e un file di esempio che caricheremo nella cartella definita dal nostro utente FTP. Il prossimo passo è aprire la connessione FTPTuttavia, in questo caso utilizzeremo un nome utente e una password, poiché in teoria stiamo accedendo a un server con autenticazione non anonima, ciò è principalmente per motivi di sicurezza e anche per dimostrare che il nostro esempio funziona in altri casi.
Continuiamo a valutare l'estensione del nostro file, con questo vedremo se è un file di testo, per questo usiamo storline (), con cui non intaccheremo il contenuto della stessa, nel caso si trattasse di un'altra estensione diversa da quelle definite utilizzeremo il metodo storbinario () poter passare il file nella sua forma originale con il suo contenuto binario, non corrompendolo e permettendogli di continuare ad essere utilizzato.
Infine usiamo argparse () per poter prendere gli argomenti che un utente può introdurre per utilizzare il nostro programma, con l'eccezione che se non inserisce valori, verranno presi i valori globali definiti all'interno del nostro programma. Lanciamo il nostro programma e se tutto è andato a buon fine potremo vedere il seguente output nella nostra console:

INGRANDIRE

Notiamo che in questo caso il parametro utente è l'unico che usiamo, poiché sul nostro server abbiamo un utente chiamato test-python, quindi introduciamo la password assegnata a detto utente e l'upload del file viene effettuato in modo efficace.
Con questo finiamo questo tutorial, abbiamo imparato come stabilire una connessione FTP da un programma realizzato in Pitone, l'importante qui è notare come con i metodi che provengono dalla libreria standard di Pitone siamo riusciti a realizzare funzionalità che altrimenti avrebbero impiegato molto tempo, a parte la grande quantità di codice che avrebbe dovuto essere generato. Consigliamo di continuare ad indagare sulla documentazione ufficiale della libreria ftplib, in questo modo aumenteremo notevolmente le nostre competenze nel mondo Pitone, aprendo così le porte per essere più efficaci come sviluppatori in questo mondo tecnologico altamente competitivo.
wave wave wave wave wave