Werken met FTP vanuit Python

Inhoudsopgave
Python Het is een taal die ons in staat stelt om op een gemakkelijke en intuïtieve manier te werken met de verschillende functionaliteiten van besturingssystemen, dankzij het grote aantal bibliotheken en documentatie die gratis en goed uitgelegd op het net bestaan.
Een van de sterkste punten van deze taal is het werken met netwerkprotocollen, waaronder de FTP en iets dat gebruikelijker is, zoals e-mail, hiermee kunnen we programma's of toepassingen ontwikkelen waarmee we desgewenst automatisch bestanden naar externe computers kunnen uploaden, zonder dat we onze toevlucht hoeven te nemen tot andere tools buiten het ecosysteem van Python.
Het protocol FTP stelt ons in staat om bestandsoverdrachten te maken via een verbinding in een netwerk. Normaal gesproken is dit het protocol dat we gebruiken om op afstand verbinding te maken met servers en op deze manier bestanden te manipuleren, meestal de poort 21Dit is echter helemaal naar de smaak van de consument, dus als we een andere poort zien, is het niet verwonderlijk dat het een installatie op maat is.
Om met dit protocol te communiceren, hebben we twee dingen nodig, de eerste is een server die in de lucht is en beschikbaar is voor ons netwerk, deze kan zich op hetzelfde netwerk bevinden of misschien op internet. Het tweede dat nodig is, is een client die informatie van de server kan verzenden en ontvangen, deze client moet de mogelijkheid hebben om de door de service gespecificeerde poorten en de vastgestelde authenticatie te gebruiken.
Maak een klant in Python dat ik verbinding kan maken FTP Vanaf het begin is het mogelijk, maar de moeite die het ons zou kosten zou aanzienlijk zijn en uiteindelijk kan het tevergeefs zijn als we niet iets speciaals nodig hebben.
Om overlast en onnodige ontwikkeling te voorkomen Python biedt ons een bibliotheek die ons al met veel van het werk helpt. We praten over ftplib, het bevat complete en reeds geteste en verfijnde methoden die communicatie vergemakkelijken met behulp van het bestandsoverdrachtsprotocol FTP.
Hoe gebruik je de bibliotheek?Om deze bibliotheek te gebruiken, hoeven we deze alleen maar in ons programma op te nemen met behulp van de instructie importeren en dan beginnen we aan onze normale ontwikkeling. In het volgende voorbeeld gaan we een klein clientprogramma maken dat verbinding kan maken met een server FTP, in dit geval gaan we de dienst gebruiken kernel.org dat is een Linux-website en daarmee zullen we de beschikbare bestanden opsommen.
We kiezen deze server omdat deze geen authenticatie nodig heeft en het ons in staat stelt om de anonieme modus te gebruiken. Laten we dan de code bekijken en dan zullen we de bijbehorende uitleg doen, de enige vereiste die we nodig hebben is om te hebben Python 2.7 en internetverbinding:
 #! / usr / bin / env python PATH_FTP_SERVER = 'ftp.kernel.org' import ftplib def client_ftp_connection (server, gebruikersnaam, mail): # open de verbinding ftp = ftplib.FTP (server, gebruikersnaam, mail) # we geven de bestanden in de / pub directory ftp.cwd ("/ pub") print "Beschikbare bestanden in% s:"% serverbestanden = ftp.dir () print bestanden ftp.quit () if __name__ == '__main__': client_ftp_conexion ( server = FTP_SERVER_PATH, gebruikersnaam = 'anoniem', mail='[email protected]',) 

Het eerste wat we doen is een variabele in het bestand definiëren die het serverpad zal bevatten FTP waarmee we de verbinding willen maken, in dit geval is dat ftp .kernel.org, hier kunnen we kernelinformatie vandaan halen Linux.
Volgende handeling doen we de importeren uit de boekhandel ftplib hierboven, hiermee zorgen we ervoor dat alle noodzakelijke methoden kunnen worden gebruikt om verbinding te maken met de hierboven gedefinieerde server, hiervoor gebruiken we de methode FTP van hetzelfde, daar zullen we de route, de gebruikersnaam en een e-mail doorgeven.
De verbinding controlerenOm te testen of de verbinding werkt, gebruiken we het commando cwd om naar een directory te navigeren en vervolgens met richt () We kunnen de bestanden in die map op de server weergeven, zodra we klaar zijn met onze procedure noemen we de methode ontslag nemen () om de sessie te beëindigen en de verbinding te verbreken.
Deze code moet in een bestand komen met de naam die we willen met de extensie .py zodat onze tolk Python kan het uitvoeren, hiervoor in het pad waar ons bestand zich bevindt, voeren we het uit met het gereserveerde woord python en de naam van ons bestand, wat ons iets zou moeten geven dat lijkt op wat we in het volgende scherm zien:

VERGROTEN

Hoewel we in het vorige voorbeeld de bestanden van een server kunnen weergeven, wat best handig is om er informatie van te krijgen, is iets krachtigers het kunnen upload bestanden. De hulpprogramma's hiervan zijn talrijk, we kunnen bijvoorbeeld de overdracht van bestanden tellen die het gevolg zijn van de ene toepassing voor verwerking van een andere, of misschien back-ups maken van een computer op een andere die zich binnen het netwerk bevindt. Natuurlijk kunnen er tegenwoordig veel elegantere oplossingen zijn, maar het is niet genoeg om dit te kunnen bereiken met een applicatie die we zelf ontwikkelen.
VereisteDe aanvullende vereiste die we voor deze oefening nodig hebben, is dat u een lokale FTP-server in onze testapparatuur, hiervoor als we een Linux-systeem hebben dat we kunnen gebruiken wu-ftp, maar als we op het platform zijn ramen we kunnen Filezilla Server gebruiken die gratis te gebruiken is.
Welke server we ook kunnen gebruiken, we moeten machtigingen hebben of de mogelijkheid van anonieme toegang, hoe dan ook, in de volgende code zullen we op een betere manier zien hoe we bestanden kunnen uploaden.
Wij moeten maak een gebruiker en een FTP-account aan In de lokale server die we maken om van dit voorbeeld gebruik te kunnen maken, werkt deze ook met externe servers, we moeten er alleen voor zorgen dat we onze inloggegevens up-to-date hebben. Dan kunnen we de volgende code gebruiken:
 #! / 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, gebruikersnaam, wachtwoord, upload_file): print "Verbinden met server:% s " % server ftp = ftplib.FTP (server) print" Inloggen als: gebruiker =% s "% gebruikersnaam ftp.login (gebruikersnaam, wachtwoord) ext = os.path.splitext (upload_file) [1] indien ext in ( ". txt", ".htm", ".html"): ftp.storlines ("STOR" + upload_file, open (upload_file)) else: ftp.storbinary ("STOR" + upload_file, open (upload_file, "rb" ), 1024) print "Geüploade bestand:% s"% upload_bestand if __name__ == '__main__': parser = argparse.ArgumentParser (description = 'Voorbeeld van het uploaden van FTP-bestanden') 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 gebruikersnaam ", default = getpass.getuser ()) application_parameters = parser.parse_args () server, upload_file, gebruikersnaam = application_parameters.server, application_parameters. upload_file, application_parameters.user_name wachtwoord: wachtwoord: getpass.getpass het (prompt =") wachtwoord: getpass.getpass de (prompt = ") upload_ftp (server, gebruikersnaam, wachtwoord, upload_file) 

In dit voorbeeld, naast het importeren van de bibliotheek ftplib, we importeren ook bibliotheken jij om toegang te krijgen tot de commando's van het besturingssysteem, gebruiken we bovendien argparse Y Krijg een pas om het gebruik van door de gebruiker ingevoerde parameters te verwerken en zo ons programma dynamischer te maken.
Vervolgens definiëren we een aantal constanten waarmee we de server gaan opzetten en een voorbeeldbestand dat we zullen uploaden naar de map die door onze gebruiker is gedefinieerd FTP. De volgende stap is het openen van de verbinding FTPIn dit geval zullen we echter een gebruikersnaam en wachtwoord gebruiken, aangezien we in theorie toegang hebben tot een server met niet-anonieme authenticatie, dit is meestal om veiligheidsredenen en ook om aan te tonen dat ons voorbeeld in andere gevallen werkt.
We blijven de extensie van ons bestand evalueren, hiermee zullen we zien of het een tekstbestand is, hiervoor gebruiken we verhaallijnen (), waarmee we de inhoud van hetzelfde niet zullen beïnvloeden, in het geval dat het een andere extensie is die verschilt van de gedefinieerde, zullen we de methode gebruiken storbinaire () om het bestand in zijn oorspronkelijke vorm met zijn binaire inhoud door te geven, zodat het niet beschadigd raakt en het verder kan worden gebruikt.
Eindelijk gebruiken we argparse () om de argumenten te kunnen nemen die een gebruiker kan introduceren om ons programma te gebruiken, met de uitzondering dat als het geen waarden plaatst, de globale waarden die in ons programma zijn gedefinieerd, zullen worden genomen. We voeren ons programma uit en als alles correct is verlopen, kunnen we de volgende uitvoer in onze console zien:

VERGROTEN

We merken op dat in dit geval de gebruikersparameter de enige is die we gebruiken, omdat we op onze server een gebruiker hebben met de naam test-python, dan voeren we het wachtwoord in dat aan de gebruiker is toegewezen en wordt het uploaden van het bestand effectief uitgevoerd.
Hiermee sluiten we deze tutorial af, we hebben geleerd hoe we een verbinding kunnen maken FTP van een programma gemaakt in Python, het belangrijkste hier is om op te merken hoe met methoden die afkomstig zijn uit de standaardbibliotheek van Python we zijn erin geslaagd om functionaliteiten uit te voeren die ons anders veel tijd zouden kosten, afgezien van de grote hoeveelheid code die gegenereerd zou moeten worden. We raden aan om de officiële documentatie van de boekhandel te blijven onderzoeken ftplib, op deze manier zullen we onze vaardigheden in de wereld aanzienlijk vergroten Python, waardoor de deuren worden geopend om effectiever te zijn als ontwikkelaars in deze zeer competitieve technologische wereld.
wave wave wave wave wave