Darbas su FTP iš „Python“

Turinys
Python Tai kalba, leidžianti lengvai ir intuityviai integruoti darbą su skirtingomis operacinių sistemų funkcijomis dėl daugybės bibliotekų ir dokumentų, esančių internete nemokamai ir gerai paaiškinta.
Viena stipriausių šios kalbos pusių yra darbas su tinklo protokolais, tarp kurių galime paminėti FTP ir kai kas labiau paplitusi, pvz., el. Python.
Protokolas FTP leidžia mums perkelti failus per tinklo ryšį. Paprastai tai yra protokolas, kurį naudojame nuotoliniu būdu prisijungdami prie serverių ir tokiu būdu manipuliuodami failais, dažniausiai uostas 21Tačiau tai visiškai priklauso nuo vartotojo skonio, todėl, jei pamatysime kitą uostą, nenuostabu, kad tai yra nestandartinė instaliacija.
Kad galėtume sąveikauti su šiuo protokolu, mums reikia dviejų dalykų: pirmasis yra serveris, kuris yra ore ir yra prieinamas mūsų tinklui, jis gali būti tame pačiame tinkle arba galbūt internete. Antras dalykas, kurio reikia, yra klientas, galintis siųsti ir gauti informaciją iš minėto serverio, šis klientas turi turėti galimybę naudotis paslaugos nurodytais prievadais ir nustatytu autentifikavimu.
Įtraukite klientą Python kad galiu užmegzti ryšį FTP Nuo nulio tai įmanoma, tačiau pastangos, kurių mums prireiktų, būtų nemažos, ir galų gale jos gali būti bergždžios, jei mums nereikia kažko ypatingo.
Kad išvengtumėte nepatogumų ir nereikalingo tobulėjimo Python suteikia mums biblioteką, kuri jau padeda daugeliui darbų. Mes kalbame apie ftplib, jame yra išsamūs ir jau išbandyti bei patobulinti metodai, palengvinantys bendravimą naudojant failų perdavimo protokolą FTP.
Kaip naudotis biblioteka?Norėdami naudotis šia biblioteka, mes tiesiog turime ją įtraukti į savo programą naudodamiesi instrukcija importas ir tada mes pradedame savo įprastą vystymąsi. Šiame pavyzdyje mes sukursime nedidelę kliento programą, kuri gali prisijungti prie serverio FTP, šiuo atveju mes ketiname naudotis paslauga kernel.org kuri yra „Linux“ svetainė ir su tuo išvardysime galimus failus.
Mes pasirenkame šį serverį, nes jam nereikia autentifikuoti ir jis leidžia naudoti anoniminį režimą. Tada pažiūrėkime kodą ir tada paaiškinsime, vienintelis reikalavimas yra turėti „Python“ 2.7 ir interneto ryšys:
 #! / usr / bin / env python PATH_FTP_SERVER = 'ftp.kernel.org' importuoti ftplib def client_ftp_connection (serveris, vartotojo vardas, paštas): # atidaryti ryšį ftp = ftplib.FTP (serveris, vartotojo vardas, paštas) # mes išvardijame sąrašą failai / pub kataloge ftp.cwd (" / pub") print "Failai, esantys% s:"% serverio failai = ftp.dir () spausdinti failus ftp.quit () if __name__ == '__main__': client_ftp_conexion ( serveris = FTP_SERVER_PATH, naudotojo vardas = 'anonimas', mail='[email protected] ',) 

Pirmas dalykas, kurį mes darome, yra nustatyti kintamąjį faile, kuriame bus serverio kelias FTP prie kurio norime prisijungti, šiuo atveju taip yra ftp .kernel.org, čia mes galime gauti informacijos apie branduolį Linux.
Kitas veiksmas, kurį darome importas iš knygyno ftplib kaip jau minėta, tuo mes užtikriname galimybę naudoti visus būtinus prisijungimo prie aukščiau apibrėžto serverio metodus, tam mes naudojame metodą FTP to paties, mes praeisime maršrutą, vartotojo vardą ir el.
Tikrinamas ryšysNorėdami patikrinti, ar ryšys veikia, naudojame komandą cwd , norėdami pereiti prie katalogo, tada su dir () Mes galime išvardyti failus tame aplanke serveryje, kai baigsime procedūrą, vadinsime metodą mesti () kad baigtumėte sesiją ir nutrauktumėte ryšį.
Šis kodas turi būti įtrauktas į norimo pavadinimo failą su plėtiniu .py kad mūsų vertėjas Python gali jį vykdyti, tam keliui, kuriame yra mūsų failas, vykdome jį su rezervuotu žodžiu python ir mūsų failo pavadinimas, kuris turėtų suteikti mums kažką panašaus į tai, ką matome šiame ekrane:

DIDELIS

Nors ankstesniame pavyzdyje galime išvardyti serverio failus, kurie yra gana naudingi norint gauti iš jų informaciją, kažkas galingesnio gali įkelti failus. Tai gali būti daug naudingų, mes galime suskaičiuoti, pavyzdžiui, failų, gautų iš vienos programos, perdavimą apdoroti iš kitos, arba galbūt padaryti atsarginę kompiuterio kopiją kitoje, esančioje tinkle. Žinoma, šiandien gali būti kur kas elegantiškesnių sprendimų, tačiau neužtenka to pasiekti naudojant programą, kurią kuriame patys.
ReikalavimasPapildomas reikalavimas, kurio mums reikia šiam pratimui, yra turėti vietinis FTP serveris mūsų bandymų įrangoje, jei tai yra Linux sistema, kurią galime naudoti wu-ftp, bet jei esame platformoje „Windows“ galime naudoti nemokamą „Filezilla Server“.
Nepriklausomai nuo serverio, kurį galime naudoti, turime turėti leidimus ar galimybę anonimiškai pasiekti, bet kokiu atveju šiame kode geriau matysime, kaip galime įkelti failus.
Mes privalome sukurti vartotoją ir FTP paskyrą Vietiniame serveryje, kurį sukuriame, kad galėtume pasinaudoti šiuo pavyzdžiu, jis taip pat veikia su nuotoliniais serveriais, mes tiesiog turime įsitikinti, kad mūsų kredencialai yra atnaujinti. Tada galime naudoti šį kodą:
 #! / usr / bin / env python import os import argparse import ftplib import getpass SERVER_FTP_LOCAL = 'localhost' FILE_TO_UPLOAD = 'example.txt' def upload_ftp (serveris, vartotojo vardas, slaptažodis, upload_file): print "Prisijungimas prie serverio:% s" % server ftp = ftplib.FTP (server) print "Prisijungti kaip: user =% s"% username ftp.login (vartotojo vardas, slaptažodis) ext = os.path.splitext (upload_file) [1] if 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 "Įkeltas failas:% s"% upload_file if __name__ == '__main__': parser = argparse.ArgumentParser (description = 'FTP failų įkėlimo pavyzdys') parser.add_argument ('- serveris', action = "store" , dest = "serveris", numatytasis = SERVER_FTP_LOCAL) parser.add_argument ('- file', action = "store", dest = "file_upload", default = FILE_TO_UPLOAD) parser.add_argument ('- user', action = "store") , dest = "n vartotojo_vardas ", numatytasis = getpass.getuser ()) application_parameters = parser.parse_args () serveris, upload_file, user_name = application_parameters.server, application_parameters. upload_file, application_parameters.user_name slaptažodis: slaptažodis: getpass.getpass (prompt =") slaptažodis: getpass.getpass the (prompt = ") upload_ftp (serveris, vartotojo vardas, slaptažodis, upload_file) 

Šiame pavyzdyje, be bibliotekos importavimo ftplib, taip pat importuojame bibliotekas tu kad galėtume pasiekti operacinės sistemos komandas, mes papildomai naudojame argparse Y getpass siekiant apdoroti vartotojo įvestų parametrų naudojimą ir taip padaryti mūsų programą dinamiškesnę.
Tada mes apibrėžiame keletą konstantų, su kuriomis ketiname sukurti serverį, ir pavyzdinį failą, kurį įkelsime į vartotojo nustatytą aplanką FTP. Kitas žingsnis - atidaryti ryšį FTPTačiau šiuo atveju naudosime vartotojo vardą ir slaptažodį, nes teoriškai prieiname prie serverio su neanoniminiu autentifikavimu, tai dažniausiai daroma saugumo sumetimais, taip pat norint parodyti, kad mūsų pavyzdys veikia kitais atvejais.
Mes ir toliau vertiname savo failo plėtinį, todėl pamatysime, ar tai tekstinis failas, kurį naudojame storlines (), su kuriuo neturėsime įtakos to paties turinio, jei bus kitas plėtinys, kuris skiriasi nuo apibrėžtų, naudosime metodą storbinary () kad būtų galima perduoti failą pradine forma su dvejetainiu turiniu, taip jo nesugadinant ir leidžiant jį toliau naudoti.
Galiausiai naudojame argparse () kad galėtų priimti argumentus, kuriuos vartotojas gali pateikti naudodamasis mūsų programa, išskyrus tai, kad jei jis nenustato reikšmių, bus laikomasi mūsų programoje apibrėžtų visuotinių vertybių. Vykdome savo programą ir, jei viskas bus gerai, konsolėje galėsime matyti tokią išvestį:

DIDELIS

Atkreipiame dėmesį, kad šiuo atveju vartotojo parametras yra vienintelis, kurį naudojame, nes mūsų serveryje yra vartotojas, vadinamas test-python, tada įvedame šiam vartotojui priskirtą slaptažodį ir failo įkėlimas atliekamas efektyviai.
Baigę šią pamoką, mes išmokome užmegzti ryšį FTP iš sukurtos programos Python, čia svarbu atkreipti dėmesį į tai, kaip naudojant standartinės bibliotekos metodus Python mums pavyko atlikti funkcijas, kurios kitu atveju mums būtų užtrukusios, išskyrus didelį kodo kiekį, kurį turėtume sugeneruoti. Rekomenduojame toliau tirti oficialią knygyno dokumentaciją ftplib, tokiu būdu žymiai padidinsime savo įgūdžius pasaulyje Python, tokiu būdu atveriant duris, kad būtume efektyvesni kaip kūrėjai šiame labai konkurencingoje technologijų pasaulyje.
wave wave wave wave wave