Belajar Python: modul argparse

Jika Anda terlibat dalam pemrosesan data dan analisis menggunakan Python, maka, cepat atau lambat, Anda harus melampaui Notebook Jupyter, mengubah kode Anda menjadi skrip yang dapat dijalankan menggunakan baris perintah. Di sinilah modul argparse berguna. Untuk pemula, terbiasa dengan Jupyter Notebook, langkah ini berarti kebutuhan untuk meninggalkan zona nyaman dan pindah ke lingkungan baru. Bahan, terjemahan yang kami terbitkan hari ini, ditulis untuk memfasilitasi transisi semacam itu.


Modul argparse

Modul argparse


Modul argparse dapat dibandingkan dengan kekuatan alam yang telah mendirikan puncak gunung yang menjulang tinggi di atas awan. Berkat modul ini dalam skrip, menjadi mungkin untuk bekerja dengan apa, tanpa penggunaannya, akan disembunyikan dari kode skrip ini.

Perlu dicatat bahwa argparse adalah modul library Python standar yang direkomendasikan untuk bekerja dengan argumen baris perintah. Saya tidak dapat menemukan panduan argparse yang bagus untuk pemula, jadi saya memutuskan untuk menulis panduan seperti itu sendiri.

Kehidupan di luar Notebook Jupyter


Ketika saya pertama kali menemukan argparse dalam skrip Python yang saya butuhkan untuk proyek yang saya lakukan di waktu luang, saya berpikir: "Apa konstruksi misterius ini?" Setelah itu, saya cepat-cepat mentransfer kode itu ke Notebook Jupyter, tetapi langkah itu ternyata tidak rasional.

Saya harus bisa menjalankan skrip saja, dan tidak bekerja dengannya menggunakan Notebook Jupyter. Sebuah skrip yang berdiri sendiri yang menggunakan modul argparse akan jauh lebih mudah digunakan, mengerjakannya akan lebih mudah daripada mengandalkan kemampuan Notebook Jupyter. Namun, kemudian saya sedang terburu-buru, dan ketika saya melihat dokumentasi argparse, saya tidak bisa langsung memahami esensinya, jadi saya tidak menggunakan versi asli dari naskah.

Sejak itu, saya menemukan argparse dan saya sangat menyukai modul ini. Sekarang saya menganggapnya sangat vital. Namun, untuk menguasainya tidak begitu sulit.

Mengapa kita membutuhkan modul argparse?


Modul argparse memungkinkan Anda untuk mem-parsing argumen yang diteruskan ke skrip saat dijalankan dari baris perintah, dan memungkinkan untuk menggunakan argumen ini dalam skrip. Artinya, kita berbicara tentang fakta bahwa modul ini memungkinkan skrip untuk menyediakan beberapa data pada saat peluncurannya, dan skrip akan dapat menggunakan data ini selama pelaksanaan kode. Modul argparse adalah alat yang dengannya Anda dapat menjalin komunikasi antara pembuat program dan orang yang menggunakannya, misalnya, antara Anda saat Anda menulis skrip hari ini dan Anda saat Anda meluncurkannya besok, memberikan sesuatu padanya.

Menggunakan argparse berarti bahwa, jika perlu, mengubah perilaku skrip atau, jika perlu, mentransfer beberapa data ke dalamnya, jika disediakan oleh penulis skrip, pengguna tidak perlu mengedit kode program. Hasilnya, skrip mendapatkan tingkat fleksibilitas tertentu.

Contoh


Misalkan Anda ingin menulis skrip untuk mengonversi file video ke gambar biasa menggunakan pustaka OpenCV . Agar skrip untuk menyelesaikan masalah ini, ia perlu mengetahui tempat penyimpanan file video, dan tempat di mana Anda harus meletakkan gambar yang sudah jadi. Artinya, ia membutuhkan informasi tentang dua folder, jalur yang, yang sangat tidak nyaman, dapat dikodekan dalam kode skrip, atau, yang jauh lebih baik, Anda dapat membiarkan pengguna menentukan skrip dengan memasukkannya sebagai argumen baris perintah saat menjalankan skrip. Untuk melengkapi skrip dengan kesempatan seperti itu, modul argparse bermanfaat bagi kita. Beginilah bagian skripnya (sebut saja skrip ini videos.py ), tempat argumen baris perintah diuraikan:

 # videos.py import argparse parser = argparse.ArgumentParser(description='Videos to images') parser.add_argument('indir', type=str, help='Input dir for videos') parser.add_argument('outdir', type=str, help='Output dir for image') args = parser.parse_args() print(args.indir) 

Di sini, di awal file, modul argparse diimpor. Kemudian, menggunakan konstruksi argparse.ArgumentParser() , objek parser dibuat dengan deskripsi. Selanjutnya, dengan menggunakan metode parser.add_argument() , variabel parser.add_argument() indir , di mana ia direncanakan untuk menulis path ke folder dengan file video. Pada saat yang sama, ini mengindikasikan bahwa ia memiliki tipe string, dan informasi referensi tentangnya juga diatur. Setelah itu, dengan cara yang sama, variabel outdir , di mana path ke folder di mana skrip harus meletakkan gambar yang dibuat berdasarkan file video akan didapat. Pada langkah berikutnya, hasil parsing argumen baris perintah masuk ke variabel args . Apa yang diteruskan ke skrip saat startup sekarang akan tersedia sebagai properti indir dan outdir dari objek args . Sekarang Anda dapat bekerja dengan nilai-nilai ini. Dalam hal ini, kita cukup mencetak ke konsol apa yang diteruskan ke skrip dalam argumen indir .

Berikut cara menjalankan skrip ini dari baris perintah:

 python videos.py /videos /images 

Perhatikan bahwa garis /videos dan /images tidak perlu dikutip. Sebuah skrip yang diluncurkan dengan cara ini akan menampilkan baris /videos ke terminal, dengan demikian mengkonfirmasikan kemungkinan menggunakan argumen yang diteruskan ke dalamnya dalam kodenya. Inilah keajaiban argparse dalam aksi.


Keajaiban argumen baris perintah parsing

Rincian argparse


Kami baru saja melihat contoh argparse sederhana. Sekarang mari kita bahas beberapa detail mengenai argparse.

▍ Argumen Posisi


Konstruksi form parser.add_argument('indir', type=str, help='Input dir for videos') dari skrip videos.py dimaksudkan untuk membuat argumen posisi. Saat memanggil skrip, urutan argumentasi semacam itu penting. Jadi, argumen pertama yang diteruskan ke skrip menjadi argumen posisi pertama, argumen kedua menjadi argumen posisi kedua.

Apa yang terjadi jika skrip dijalankan tanpa argumen dengan menjalankan perintah python videos.py di terminal?

Dalam hal ini, pesan kesalahan berikut akan ditampilkan:

 videos.py: error: the following arguments are required: indir, outdir 

Akibatnya, ternyata untuk menjalankan skrip yang menyediakan untuk penggunaan argumen posisional, argumen tersebut harus selalu ditentukan saat dijalankan.

▍ Argumen opsional


Apa yang terjadi ketika skrip kami dijalankan dengan perintah python videos.py --help ?

Sebagai tanggapan, informasi bantuan tentang hal itu akan ditampilkan. Ini persis informasi tentang argumen posisi yang kami tunjukkan ketika menjelaskan variabel yang sesuai:

 usage: videos.py [-h] indir outdir Videos to images positional arguments: indir       Input dir for videos outdir      Output dir for image optional arguments: -h, --help  show this help message and exit 

Script memberi tahu kami banyak hal menarik tentang apa yang diharapkan dari pengguna, dan help adalah contoh dari argumen opsional. Perhatikan bahwa --help (atau -h ) adalah satu-satunya argumen opsional standar yang dapat kita gunakan ketika bekerja dengan argparse, tetapi jika Anda membutuhkan argumen opsional lainnya, Anda dapat membuatnya sendiri.

Argumen opsional dibuat dengan cara yang sama seperti argumen posisi. Perbedaan utama antara perintah untuk membuatnya adalah ketika menentukan nama argumen seperti itu, nama-nama ini dimulai dengan urutan karakter -- , atau, untuk bentuk argumen pendek, dengan karakter - . Misalnya, argumen opsional dapat dibuat seperti ini:

 parser.add_argument('-m', '--my_optional') 

Berikut adalah contoh cara membuat dan menggunakan argumen opsional. Perhatikan bahwa ketika mendeskripsikan argumen opsional di sini, kami menetapkan tipenya sebagai int . Artinya, itu adalah bilangan bulat. Dalam situasi serupa, Anda bisa menggunakan jenis Python lain.

 # my_example.py import argparse parser = argparse.ArgumentParser(description='My example explanation') parser.add_argument(   '--my_optional',   type=int,   default=2,   help='provide an integer (default: 2)' ) my_namespace = parser.parse_args() print(my_namespace.my_optional) 

Argumen yang dijelaskan sebagai --my_optional tersedia dalam program sebagai properti dari objek my_optional bernama my_optional .

Argumen opsional dapat diberikan nilai-nilai yang akan mereka miliki secara default. Dalam kasus kami, jika tidak ada nilai yang diberikan ke argumen my_example saat skrip dipanggil, nomor 2 akan dituliskan padanya, yang akan ditampilkan ke konsol. Untuk menetapkan nilai argumen ini selama eksekusi skrip, Anda dapat menggunakan konstruksi berikut:

 python my_example.py  --my_optional=3 

Untuk apa argparse digunakan?


Modul argparse dapat digunakan untuk mengembangkan aplikasi Python yang rencananya akan dikemas dalam wadah Docker. Jadi, misalnya, jika Anda harus meneruskan argumen baris perintah ketika memulai aplikasi yang dikemas dalam sebuah wadah, maka Anda dapat menggambarkannya pada tahap perakitan kontainer di Dockerfile menggunakan instruksi RUN . Anda dapat menggunakan instruksi CMD atau ENTRYPOINT untuk menjalankan skrip selama ENTRYPOINT kontainer. Detail tentang Dockerfiles dapat ditemukan di sini .

Ringkasan


Kami memeriksa cara dasar bekerja dengan modul argparse, yang dengannya Anda dapat melengkapi skrip Anda dengan kemampuan untuk menerima dan memproses argumen baris perintah. Perlu dicatat bahwa fitur argparse tidak berakhir di sana. Misalnya, menggunakan parameter nargs saat menjelaskan argumen memungkinkan Anda untuk bekerja dengan daftar argumen, dan parameter pilihan memungkinkan Anda menentukan set nilai yang dapat diambil argumen. Bahkan, sekarang, setelah menguasai fitur utama argparse, Anda, tanpa banyak kesulitan, dapat mempelajari modul ini lebih dalam, menggunakan dokumentasi untuk itu.

Jika Anda terbiasa bekerja dengan Notebook Jupyter dan ingin pindah dari praktik ini, ini dia - bahan tentang bekerja dengan variabel lingkungan. Berikut adalah bahan pada alat repo2docker , yang memungkinkan Anda untuk mengubah repositori Notebook Jupyter menjadi gambar Docker.

Pembaca yang budiman! Bagaimana Anda bekerja dengan argumen baris perintah dalam skrip Python?

Source: https://habr.com/ru/post/id440654/


All Articles