Cara menyambung ke pelayan FTP menggunakan python
- 4333
- 1019
- Mr. Ramon Runolfsson
FTP (protokol pemindahan fail) tidak memerlukan persembahan: ia adalah antara kaedah pemindahan fail yang paling banyak digunakan antara satu atau lebih pelanggan dan pelayan. Dengan reka bentuk ia menyokong kedua -dua akses dan pengesahan tanpa nama, tetapi dalam bentuk yang paling asas, ia tidak memberikan penyulitan data, itulah sebabnya ia sering dijamin melalui TLS.
Banyak aplikasi klien FTP boleh didapati di Linux, sebagai contoh FileZilla (grafik) atau lftp (baris arahan). Kadang -kadang, bagaimanapun, kami mungkin mahu mengakses pelayan FTP secara pemrograman, mungkin untuk menjadualkan pemindahan fail. Satu cara mudah untuk melakukan ini adalah dengan menggunakan bahasa pengaturcaraan seperti python. Dalam tutorial ini kita akan belajar cara menggunakannya ftplib perpustakaan untuk berinteraksi dengan pelayan FTP.
Dalam tutorial ini anda akan belajar:
- Cara membuat contoh ftplib.Kelas FTP
- Cara menyenaraikan fail pada pelayan FTP jauh
- Cara memuat naik fail dalam mod binari dan "baris"
- Cara memuat turun fail dalam mod binari dan "baris"
- Cara membuat, memadam dan menamakan semula direktori dan fail
- Cara menukar direktori kerja
Keperluan perisian dan konvensyen yang digunakan
Kategori | Keperluan, konvensyen atau versi perisian yang digunakan |
---|---|
Sistem | Pengedaran bebas |
Perisian | Python |
Yang lain | Tidak ada kebenaran lain yang diperlukan |
Konvensyen | # - Memerlukan komando linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah$-memerlukan komando Linux yang diberikan sebagai pengguna yang tidak berkadar biasa |
Perpustakaan FTPLIB
The ftplib Modul adalah sebahagian daripada Perpustakaan Standard Python, dan menyediakan dua kelas utama untuk abstrak yang bekerja dengan sambungan FTP: ftblib.Ftp
dan ftplib.Ftp_tls
. Yang terakhir adalah subclass dari bekas dan menambah sokongan untuk TLS. Mari lihat beberapa kes penggunaan yang paling biasa di perpustakaan.
Menyambung ke pelayan FTP
Untuk menyambung ke pelayan FTP, perkara pertama yang perlu kita lakukan ialah membuat contoh Ftp
kelas. Kelas menyokong dengan
penyataan supaya ia boleh digunakan dengan pengurus konteks: dengan cara ini, sambungan akan ditutup secara automatik apabila kami selesai bekerja atau ralat berlaku. Berikut adalah contoh penggunaan:
dengan ftplib.FTP ('FTP.SomeHost.com ') sebagai ftp: # codehere
Salinan Semua parameter Ftp
Pembina kelas adalah pilihan, namun di sini kami memberikan hujah pertama yang diterima olehnya, iaitu Tuan rumah Kami mahu menyambung ke. Sekiranya hujah disediakan, Sambung
Kaedah, yang digunakan untuk mewujudkan hubungan dengan pelayan, secara tersirat dipanggil dengan tuan rumah yang ditentukan diluluskan sebagai hujah, jika tidak, ia harus dipanggil secara eksplisit:
dengan ftplib.Ftp () sebagai ftp: ftp.Sambung ('FTP.SomeHost.com ')
Salinan Hujah kedua yang diterima oleh Ftp
Pembina kelas adalah pengguna Kami mahu log masuk ke dalam pelayan FTP. Memberikan hujah ini akan menyebabkan log masuk
kaedah yang akan dipanggil secara tersirat dengan pengguna
, The kata laluan
dan Acct
Nilai yang diluluskan sebagai hujah (mereka adalah parameter ketiga dan keempat pembina kelas, dan lalai kepada rentetan kosong sebagai nilai):
dengan ftplib.FTP ('FTP.SomeHost.itu ',' testuser ',' testpassword ') sebagai ftp: # codehere
Salinan Sekiranya hujah tidak disediakan, log masuk
Kaedah mesti dipanggil secara eksplisit:
dengan ftplib.FTP ('FTP.SomeHost.ia ') sebagai ftp: ftp.Log masuk ('Testuser', 'Kata Laluan')
Salinan Mendapatkan senarai fail di pelayan
Sekali Ftp
objek dibuat, pada dasarnya kita mempunyai tiga cara untuk mendapatkan senarai fail yang disimpan di pelayan FTP yang kami sambungkan ke. Pertama sekali kita boleh menggunakan dir
kaedah, yang menghasilkan penyenaraian direktori seperti yang dikembalikan oleh Senarai
Perintah:
>>> dengan ftplib.FTP ('FTP.SomeHost.ia ',' pengguna ',' kata laluan ') sebagai ftp: ... ftp.dir ()
Salinan The dir
Kaedah Menerima hujah pilihan, yang merupakan direktori untuk disenaraikan (lalai adalah direktori kerja semasa, jadi dalam hal ini akar FTP). Kod di atas menghasilkan output yang serupa dengan yang berikut:
DRWXR-XR-X 2 FTP FTP 4096 13 Okt 14:37 . DRWXR-XR-X 2 FTP FTP 4096 13 Okt 14: 37 ... -RW ------- 1 FTP FTP 10 Sep 10 06:04 .ftpquota -rw-r-r-- 1 ftp ftp 5306756 18 Okt 01:32 Fail.CSV
Kaedah kedua yang boleh kita gunakan untuk mendapatkan senarai fail, adalah nlst
. Seperti namanya, kaedah ini, di bawah tudung, menghantar a Nlst
perintah ke pelayan; Ia mengembalikan senarai python yang mengandungi nama fail sebagai ahli:
>>> dengan ftplib.FTP ('FTP.SomeHost.ia ',' pengguna ',' kata laluan ') sebagai ftp: ... ftp.nlst () ... ['.',' ... ','.ftpquota ',' fail.CSV ']
Salinan Kaedah ketiga yang boleh kita gunakan untuk mendapatkan untuk menyenaraikan kandungan direktori adalah MLSD
. Kaedah ini menggunakan MLSD
Perintah (jadi untuk berfungsi, pelayan mesti menyokongnya), dan menerima dua hujah pilihan:
- The
jalan
direktori yang harus disenaraikan - Senarai maklumat yang kami mahu disertakan dalam hasilnya
Kaedah mengembalikan a penjana yang menghasilkan a Dua elemen tuple untuk setiap fail: elemen pertama setiap tuple adalah nama fail; yang kedua a Kamus mengandungi maklumat yang diminta dan nilai mereka. Mari lihat contoh:
>>> dengan ftplib.FTP ('FTP.SomeHost.ia ',' pengguna ',' kata laluan ') sebagai ftp: ... Untuk nama fail, maklumat di FTP.mlsd (): ... Cetak (nama fail, maklumat)
Salinan Output kod di atas adalah yang berikut:
. 'type': 'cdir', 'sizd': '4096', 'Modify': '20201013123732', 'Unix.mod ':' 0755 ',' Unix.uid ':' 1809 ',' unix.gid ':' 1811 ',' unik ':' fd04g58e0a67 ' ... ' type ':' pdir ',' sizd ':' 4096 ',' modify ':' 20201013123732 ',' unix.mod ':' 0755 ',' Unix.uid ':' 1809 ',' unix.gid ':' 1811 ',' unik ':' fd04g58e0a67 ' .ftpquota 'type': 'file', 'Size': '10', 'Modify': '20200910040430', 'Unix.mod ':' 0600 ',' Unix.uid ':' 1809 ',' unix.Gid ':' 1811 ',' Unik ':' FD04G58E0A9D ' Fail.CSV 'Type': 'File', 'Size': '5306756', 'Modify': '20201017233245', 'Unix.mod ':' 0644 ',' Unix.uid ':' 1809 ',' unix.gid ':' 1811 ',' unik ':' fd04g58e020a '
Perhatikan bahawa pelayan tidak dijamin menghormati senarai maklumat yang kami minta.
Mendapatkan fail dari pelayan
Untuk mendapatkan fail dari pelayan, kami boleh menggunakan Retrbinary
atau retlines
kaedah. Mari lihat bagaimana mereka berfungsi.
The Retrbinary
kaedah mengambil fail dalam mod pemindahan binari: ini adalah apa yang anda mahu gunakan untuk hanya memuat turun fail dari pelayan ke mesin tempatan anda dan tidak perlu berinteraksi dengan kandungannya. Mari lihat contoh penggunaannya. Katakan kita mahu memuat turun fail.CSV
dari pelayan; Kami hanya akan menulis:
>>> dengan ftplib.FTP ('FTP.SomeHost.ia ',' pengguna ',' kata laluan ') sebagai ftp: ... dengan buka ('fail.csv ',' wb ') sebagai muat turun_file: ... ftp.Retrbinary ('Fail Ret.csv ', muat turun_file.menulis) ... '226-fail berjaya dipindahkan \ n226 0.823 saat (diukur di sini), 6.15 mbytes sesaat '
Salinan Dalam contoh di atas, kami membuka fail tempatan untuk menulis mod binari
(fail.CSV
) menggunakan pengurus konteks, kemudian dipanggil Retrbinary
kaedah lulus
yang sesuai Ret
perintah sebagai hujah pertama (Ret NameOfTheFile
), dan jugatulis
kaedah objek fail muat turun_file
sebagai hujah kedua, yang
ialah Panggilan balik digunakan untuk setiap bahagian data yang diterima.
Bercakap mengenai ketulan data, saiz blok maksimum yang digunakan untuk pemindahan
data, secara lalai, adalah 8192
bait. Walau bagaimanapun, ini dapat diubah melalui
parameter ketiga pilihan Retrbinary
kaedah.
The retrlines
Kaedah berfungsi sedikit berbeza, kerana ia mengambil fail dalam mod "baris". Hujah pertama kaedah ini, boleh menjadi sah Ret
perintah, sama seperti yang kita gunakan dalam contoh sebelumnya, tetapi juga a Senarai
(untuk mendapatkan senarai nama fail dan maklumat mengenai mereka) atau Nlst
(Ambil sahaja nama fail). Hujah kedua kaedah adalah pilihan dan merupakan panggilan balik yang digunakan untuk setiap baris yang diambil (tingkah laku lalai adalah untuk mencetak garis ke stdout
). Penting untuk melihat bahawa setiap baris dilucutkan akhir watak garis, yang pada linux adalah \ n
.
Mari lihat contoh. Sekiranya kita menggunakan retlines
kaedah, kita boleh mengambil kandungan fail.CSV
baris fail mengikut baris:
>>> import os >>> dengan ftplib.Ftp ('host', 'pengguna', 'kata laluan') sebagai ftp: ... dengan buka ('fail.csv ',' w ') sebagai csvfile: ... ftp.retrlines ('fail ret.CSV ', Lambda X: CSFILE.Tulis ("".Sertai ([x, OS.linesep]))) ...
Salinan Dalam contoh di atas kami mengimport OS
Modul, kemudian, seperti dahulu, kami membuat fail secara tempatan, kali ini dalam mod tekstual. Dengan ftp.retrlines
kaedah yang kami ambil fail.CSV
baris fail jauh demi baris. Panggilan balik yang kami gunakan sebagai hujah kedua mengenai retrlines
ialah Lambda fungsi yang mengambil garis sebagai hujah dan memanggil tulis
kaedah csvfile
objek untuk menulis baris yang bergabung dengan linesep watak yang sesuai untuk OS, yang kami diakses oleh OS.linesep
.
Kita boleh menggunakan panggil balik untuk juga mengubah suai kandungan fail dengan cepat. Sebagai contoh remeh, bayangkan kami ingin mendapatkan huruf besar setiap perkataan yang terkandung dalam fail jauh ketika kami menyimpannya secara tempatan. Kita boleh menulis:
[...] ... ftp.retrlines ('fail ret.CSV ', Lambda X: CSFILE.Tulis ("".Sertailah ([x.atas (), OS.linesep])))
Salinan Kaedah ini, seperti yang telah kita sebutkan, boleh digunakan untuk bekerja dengan garis yang dikembalikan oleh Senarai
atau Nlst
Perintah. Katakan kami ingin menyimpan hasil penyenaraian direktori pada pelayan jauh ke dalam fail tempatan:
>>> dengan ftplib.Ftp ('host', 'pengguna', 'kata laluan') sebagai ftp: ... dengan terbuka ('list_result', 'w') sebagai localfile: ... ftp.Retrlines ('Senarai', Lambda X: LocalFile.Tulis ("".Sertai ([x, OS.linesep])))
Salinan Fail tempatan list_result
akan dicipta (atau dipotong dan ditulis semula jika sudah ada), dan kandungannya akan menjadi sesuatu yang serupa dengan:
DRWXR-XR-X 2 FTP FTP 4096 13 Okt 14:37 . DRWXR-XR-X 2 FTP FTP 4096 13 Okt 14: 37 ... -RW ------- 1 FTP FTP 10 Sep 10 06:04 .ftpquota -rw-r-r-- 1 ftp ftp 5306756 18 Okt 01:32 Fail.CSV
Memuat naik fail ke pelayan
Apabila kita perlu memuat naik fail ke pelayan FTP, kita juga boleh memilih untuk melakukannya dalam mod binari atau "baris". Kedua -dua kaedah yang boleh kita gunakan untuk menyelesaikan tugas itu, masing -masing: StoreBinary
dan storelines
.
The StoreBinary
kaedah Ftp
kelas mengambil dua hujah wajib yang sah Stor
perintah, dan objek fail yang dibuat dari fail tempatan yang dibuka dalam mod binari. Katakan kami mahu memuat naik fail; Kami akan menulis:
>>> dengan ftplib.Ftp ('host', 'pengguna', 'kata laluan') sebagai ftp: ... dengan terbuka ('linuxconfig.txt ',' rb ') sebagai file_object: ... ftp.StorBinary ('stor linuxconfig.txt ', file_object)
Salinan Sangat mudah! Sudah tentu, kita juga boleh menyimpan fail di pelayan dengan nama yang berbeza. Objek fail diluluskan sebagai hujah kedua dari storbinary
kaedah dibaca sehingga EOF. Sama seperti dalam kes Retrbinary
kaedah, kemungkinan untuk menukar saiz data, dengan hujah ketiga pilihan (lalai, adalah, sekali lagi 8192 bait). Hujah keempat yang diterima oleh storbinary
kaedah, adalah pilihan Panggilan balik fungsi yang digunakan untuk setiap bahagian data.
Untuk memuat naik baris fail mengikut baris, kita boleh menggunakan storlines
Kaedah sebaliknya. Dalam kes ini fail yang ingin kami muat naik akan dibaca mengikut baris. Dua hujah pertama adalah sama diterima oleh storbinary
kaedah, manakala yang ketiga (dan terakhir) adalah Panggilan balik yang digunakan untuk setiap baris.
Menavigasi, membuat direktori, memadam dan menamakan semula fail
The Ftp
kelas (dan Ftp_tls
kelas yang memanjangkannya) menyediakan juga beberapa kaedah yang sangat berguna untuk melaksanakan beberapa operasi yang paling biasa. Contohnya, untuk membuat direktori pada pelayan FTP jauh, kami boleh menggunakan mkd
kaedah yang mengambil nama laluan direktori untuk dibuat sebagai hujah tunggalnya:
>>> ftp.MKD ('Newdir') 'Newdir'
Salinan Untuk menukar direktori kerja kita boleh menggunakan cwd
kaedah, lulus nama direktori yang kita mahu masuk sebagai hujah:
>>> ftp.cwd ('newdir') '250 ok. Direktori semasa adalah /Newdir '
Salinan Untuk memadam direktori yang ada, kita boleh menggunakan rmd
kaedah, lulus nama direktori yang akan dikeluarkan:
>>> ftp.rmd ('newdir') '250 Direktori berjaya dikeluarkan'
Salinan Untuk memadam fail biasa, kita boleh menggunakannya Padam
Kaedah sebaliknya, lulus nama fail untuk dipadam sebagai hujah:
>>> ftp.padam fail.csv ')' 250 fail yang dipadam.CSV '
Salinan Untuk menamakan semula fail atau direktori, kita boleh menggunakan Namakan semula
kaedah. Ia menerima dua hujah: yang pertama adalah nama semasa fail atau direktori, yang kedua adalah yang baru. Untuk menamakan semula fail.CSV
ke Fail0.CSV
, Sebagai contoh, kami akan menulis:
>>> ftp.Namakan semula ('Fail.CSV ',' File0.csv ')' 250 fail berjaya dinamakan semula atau dipindahkan '
Salinan Menutup sambungan secara manual
Seperti yang telah kita pelajari, Ftp
kelas boleh digunakan dengan pengurus konteks, supaya sambungan ditutup secara automatik apabila jurubahasa keluar dengan
blok penyataan. Dalam kes -kes di mana kita perlu menutup sambungan secara manual, kita mesti menggunakannya berhenti
Kaedah: Ia memanggil Tutup
kaedah secara dalaman, dan menghantar a Berhenti
perintah ke pelayan untuk cuba menutup sambungan dengan anggun.
Kesimpulan
Dalam artikel ini kita belajar cara menggunakan python ftplib
modul untuk menyambung ke pelayan FTP dan berinteraksi dengannya. Kami melihat bagaimana membuat contoh Ftp
kelas dan apakah kaedah yang boleh kita gunakan untuk menyenaraikan kandungan direktori jauh dan memuat naik/memuat turun fail. Kami juga melihat cara membuat, memadam, menamakan semula dan mengeluarkan direktori atau fail dan cara menukar direktori kerja. Dalam tutorial ini, kami meneroka kes -kes penggunaan yang paling biasa, untuk senarai ciri lengkap, sila lawati halaman Libftp rasmi.
Tutorial Linux Berkaitan:
- Tutorial LFTP di Linux dengan contoh
- Senarai dan Pemasangan Pelanggan FTP di Ubuntu 20.04 Linux ..
- Senarai dan Pemasangan Pelanggan FTP di Ubuntu 22.04 Linux ..
- Cara Menyiapkan Pelayan OpenVPN di Ubuntu 20.04
- Ubuntu 20.04: Senarai pelanggan torrent
- Ubuntu 22.04: Senarai pelanggan torrent
- Setup Server FTP di Linux
- Perkara yang hendak dipasang di Ubuntu 20.04
- Cara Menyiapkan VSFTPD di Debian
- Cara Menyiapkan Pelayan dan Pelayan FTP/SFTP di Almalinux
- « Ubuntu 20.10 muat turun
- Cara Memperbaiki Firefox sudah berjalan tetapi tidak bertindak balas mesej ralat »