Python'dan FTP ile Çalışmak

İçindekiler
piton İnternette ücretsiz ve iyi açıklanmış çok sayıda kitaplık ve belge sayesinde, işletim sistemlerinin farklı işlevleriyle çalışmayı kolay ve sezgisel bir şekilde birleştirmemizi sağlayan bir dildir.
Bu dilin en güçlü noktalarından biri, ağ protokolleriyle çalışmasıdır, bunlardan bahsedebiliriz. FTP ve e-posta gibi daha yaygın bir şey, bununla, istersek otomatik bir şekilde uzaktaki bilgisayarlara dosya yüklememize izin veren programlar veya uygulamalar geliştirebiliriz, bunların tümü, ekosistem dışındaki diğer araçlara başvurmaya gerek kalmadan. piton.
Protokol FTP ağdaki bir bağlantı üzerinden dosya aktarımı yapmamızı sağlar. Normalde sunuculara uzaktan bağlanmak için kullandığımız protokoldür ve bu şekilde dosyaları, genellikle bağlantı noktası 21Ancak bu tamamen tüketicinin zevkine kalmış yani başka bir port görürsek bunun özel bir kurulum olması şaşırtıcı değil.
Bu protokolle etkileşimde bulunmak için iki şeye ihtiyacımız var, ilki yayında olan ve ağımıza açık olan bir sunucu, aynı ağda veya belki de internette olabilir. İhtiyaç duyulan ikinci şey, söz konusu sunucudan bilgi gönderip alabilen bir istemcidir, bu istemcinin hizmet tarafından belirtilen bağlantı noktalarını ve kurulan kimlik doğrulamasını kullanma becerisine sahip olması gerekir.
müşteri yap piton bağlantı kurabileceğim FTP Sıfırdan mümkün, ancak bunun için harcayacağımız çaba çok büyük olacak ve sonunda özel bir şeye ihtiyacımız yoksa boşuna olabilir.
Rahatsızlıktan ve gereksiz gelişmeden kaçınmak için piton işlerin çoğunda bize zaten yardımcı olan bir kütüphane sağlıyor. Hakkında konuşuyoruz ftplib, dosya aktarım protokolünü kullanarak iletişimi kolaylaştıran eksiksiz ve önceden test edilmiş ve iyileştirilmiş yöntemler içerir. FTP.
Kütüphane nasıl kullanılır?Bu kütüphaneyi kullanmak için, sadece talimatı kullanarak onu programımıza dahil etmeliyiz. içe aktarmak ve sonra normal gelişimimize başlarız. Aşağıdaki örnekte, bir sunucuya bağlanabilen küçük bir istemci programı yapacağız. FTP, bu durumda hizmeti kullanacağız kernel.org hangi bir Linux web sitesidir ve bununla birlikte mevcut dosyaları listeleyeceğiz.
Bu sunucuyu kimlik doğrulama gerektirmediği ve anonim modu kullanmamıza izin verdiği için seçiyoruz. O zaman kodu görelim ve sonra ilgili açıklamayı yapacağız, ihtiyacımız olan tek şart Python 2.7 ve İnternet bağlantısı:
 #! / usr / bin / env python PATH_FTP_SERVER = 'ftp.kernel.org' import ftplib def client_ftp_connection (sunucu, kullanıcı adı, mail): # bağlantıyı aç ftp = ftplib.FTP (sunucu, kullanıcı adı, mail) # listeliyoruz / pub dizinindeki dosyalar ftp.cwd ("/ pub") yazdır "% s'de mevcut dosyalar:"% sunucu dosyaları = ftp.dir () dosyaları yazdır ftp.quit () eğer __name__ == '__main__': client_ftp_conexion ( sunucu = FTP_SERVER_PATH, kullanıcı adı = 'anonim', mail='[email protected]',) 

Yaptığımız ilk şey, dosya içinde sunucu yolunu içerecek bir değişken tanımlamaktır. FTP bağlantı kurmak istediğimiz, bu durumda ftp .kernel.org, çekirdek bilgilerini buradan alabiliriz. Linux.
Bir sonraki eylemi yaparız içe aktarmak kitapçıdan ftplib yukarıda belirtilen, bununla yukarıda tanımlanan sunucuya bağlanmak için gerekli tüm yöntemleri kullanma olasılığını sağlıyoruz, bunun için yöntemi kullanıyoruz FTP aynı şekilde, orada rotayı, kullanıcı adını ve bir e-postayı geçeceğiz.
Bağlantıyı kontrol etmeBağlantının çalıştığını test etmek için şu komutu kullanırız: cwd bir dizine gitmek için ve ardından yön () Sunucuda o klasördeki dosyaları listeleyebiliriz, prosedürümüzü bitirdikten sonra yöntemi çağırırız. çıkış yapmak () oturumu bitirmek ve bağlantıyı kapatmak için
Bu kod, uzantılı istediğimiz ismin bir dosyasına girmelidir. .py böylece tercümanımız piton yürütebilir, bunun için dosyamızın bulunduğu yolda onu ayrılmış kelimeyle yürütürüz python ve dosyamızın adı, bu bize aşağıdaki ekranda gördüğümüze benzer bir şey vermelidir:

BÜYÜT

Önceki örnekte, onlardan bilgi almak için oldukça yararlı olan bir sunucunun dosyalarını listeleyebilmemize rağmen, daha güçlü bir şey, dosyaları yükle. Bunun yardımcı programları çoktur, örneğin, bir uygulamadan kaynaklanan dosyaların diğerinden işlenmek üzere aktarılmasını veya belki de bir bilgisayarın ağ içindeki başka bir bilgisayarda yedeklenmesini sayabiliriz. Elbette günümüzde çok daha şık çözümler olabilir ancak bunu kendi geliştirdiğimiz bir uygulama ile başarmak yeterli değil.
GereklilikBu alıştırma için ihtiyacımız olan ek gereksinim, bir yerel FTP sunucusu test ekipmanımızda, bunun için bir Linux sistemimiz varsa kullanabiliriz wu-ftp, ama eğer platformdaysak pencereler kullanımı ücretsiz olan Filezilla Server'ı kullanabiliriz.
Hangi sunucuyu kullanırsak kullanalım, izinlerimiz veya anonim erişim imkanımız olmalı, zaten aşağıdaki kodda nasıl dosya yükleyebileceğimizi daha iyi göreceğiz.
Yapmalıyız bir kullanıcı ve bir FTP hesabı oluşturun Bu örnekten faydalanabilmek için oluşturduğumuz yerel sunucuda uzak sunucularla da çalışıyor, sadece kimlik bilgilerimizin güncel olduğundan emin olmamız gerekiyor. Ardından aşağıdaki kodu kullanabiliriz:
 #! / usr / bin / env python içe aktarma işletim sistemi içe aktarma argparse içe aktarma ftplib içe aktarma getpass SERVER_FTP_LOCAL = 'localhost' FILE_TO_UPLOAD = 'example.txt' def upload_ftp (sunucu, kullanıcı adı, parola, upload_file): "Sunucuya bağlanılıyor" yazdır: % s % server ftp = ftplib.FTP (sunucu) print" Oturum açma şekli: user =% s "% kullanıcı adı ftp.login (kullanıcı adı, şifre) ext = os.path.splitext (upload_file) [1] eğer ext in ( ". txt", ".htm", ".html"): ftp.storlines ("STOR" + upload_file, open (upload_file)) başka: ftp.storbinary ("STOR" + upload_file, open (upload_file, "rb" ), 1024) print "Yüklenen dosya:% s"% upload_file if __name__ == '__main__': parser = argparse.ArgumentParser (açıklama = 'FTP dosyalarını yükleme örneği') parser.add_argument ('- sunucu', eylem = "depo" , hedef = "sunucu", varsayılan = SERVER_FTP_LOCAL) parser.add_argument ('- file', action = "store", hedef = "file_upload", default = FILE_TO_UPLOAD) parser.add_argument ('- user' , action = "store" , hedef = "n user_name ", default = getpass.getuser ()) application_parameters = parser.parse_args () sunucu, upload_file, user_name = application_parameters.server, application_parameters. upload_file, application_parameters.user_name parola: parola: getpass.getpass (istem =") parola: getpass.getpass (istem = ") upload_ftp (sunucu, kullanıcı adı, şifre, upload_file) 

Bu örnekte, kitaplığı içe aktarmanın yanı sıra ftplib, biz de kütüphaneleri içe aktarıyoruz sen işletim sistemi komutlarına erişebilmek için ayrıca kullanıyoruz tartışma Y almak Kullanıcı tarafından girilen parametrelerin kullanımını işlemek ve böylece programımızı daha dinamik hale getirmek için.
Ardından sunucuyu kuracağımız birkaç sabit ve kullanıcımız tarafından tanımlanan klasöre yükleyeceğimiz örnek bir dosya tanımlıyoruz. FTP. Bir sonraki adım bağlantıyı açmaktır. FTPAncak, bu durumda bir kullanıcı adı ve şifre kullanacağız, çünkü teoride anonim olmayan kimlik doğrulaması olan bir sunucuya erişiyoruz, bu çoğunlukla güvenlik nedenleriyle ve ayrıca örneğimizin diğer durumlarda çalıştığını göstermek için.
Dosyamızın uzantısını değerlendirmeye devam ediyoruz, bununla bir metin dosyası olup olmadığını göreceğiz, bunun için kullanıyoruz hikayeler (), aynı içeriği etkilemeyeceğimiz, tanımlananlardan farklı başka bir uzantı olması durumunda yöntemi kullanacağız. storbinary () dosyayı ikili içeriği ile orijinal haliyle geçirebilmek, böylece onu bozmamak ve kullanılmaya devam etmesine izin vermek.
Sonunda kullanıyoruz bağımsız değişken () Bir kullanıcının programımızı kullanmak için tanıtabileceği argümanları alabilmek için, bunun dışında değerler yer almıyorsa, programımızda tanımlanan global değerler alınacaktır. Programımızı çalıştırıyoruz ve her şey yolunda giderse konsolumuzda aşağıdaki çıktıyı görebileceğiz:

BÜYÜT

Bu durumda, sunucumuzda adında bir kullanıcımız olduğundan, kullandığımız tek parametrenin user parametresi olduğunu not ediyoruz. test-python, ardından söz konusu kullanıcıya atanan şifreyi tanıtıyoruz ve dosyanın yüklenmesi etkin bir şekilde gerçekleştirilir.
Bununla bu öğreticiyi bitiriyoruz, nasıl bağlantı kuracağımızı öğrendik FTP yapılan bir programdan piton, burada önemli olan, standart kütüphaneden gelen yöntemlerle nasıl yapıldığını not etmektir. piton Üretilmesi gereken büyük miktarda kodun dışında, aksi takdirde bizi uzun zaman alacak işlevleri gerçekleştirmeyi başardık. Kitapçının resmi belgelerini araştırmaya devam etmenizi öneririz. ftplib, bu şekilde dünyadaki becerilerimizi önemli ölçüde artıracağız piton, böylece bu son derece rekabetçi teknolojik dünyada geliştiriciler olarak daha etkili olmanın kapılarını açıyor.
wave wave wave wave wave