Cara menggunakan argparse untuk parse parameter skrip python
- 2626
- 140
- Miss Angelo Toy
Objektif
Belajar menggunakan modul argparse untuk dengan mudah menguraikan parameter skrip python
Persyaratan
- Pengetahuan Dasar Konsep Python dan Object Berorientasi
Kesulitan
MUDAH
Konvensi
- # - mensyaratkan perintah linux yang diberikan untuk dieksekusi dengan hak istimewa root
langsung sebagai pengguna root atau dengan menggunakansudo
memerintah - $ - mensyaratkan perintah Linux yang diberikan untuk dieksekusi sebagai pengguna biasa
Perkenalan
Dalam artikel sebelumnya kita telah melihat cara parse argumen baris perintah menggunakan getopts dalam konteks skrip bash (Anda dapat menemukan artikel di sini). Sekarang kita akan melihat bagaimana menyelesaikan tugas yang sama, dengan cara yang lebih kuat, saat menulis naskah Python.
Inisialisasi parser
Untuk mencapai tujuan kami, kami akan menggunakan modul Python yang disebut Argparse
. Ini akan memungkinkan kami menentukan parameter baris perintah kami, dan secara otomatis akan menghasilkan pesan bantuan skrip berdasarkan mereka. Jadi mari kita mulai, kita akan menyebut skrip kami “printerscript.py ”:
#!/usr/bin/env python impor argparse if __name__ == '__main__': # inisialisasi parser parser = argparse.ArgumentParser (deskripsi = "Skrip sederhana untuk menunjukkan penggunaan argparse")
Menyalin Hal pertama yang harus dilakukan adalah, jelas, mengimpor Argparse
modul. Setelah itu kami melanjutkan untuk menginisialisasi parser. Itu keterangan
kata kunci, diteruskan ke konstruktor parser adalah opsional, tetapi memungkinkan kami untuk menambahkan deskripsi singkat dari skrip saat pesan bantuan ditampilkan.
Ada kata kunci lain yang dapat kita gunakan untuk lebih menyesuaikan perilaku parser: misalnya menyediakan Epilog
kata kunci kami dapat memberikan teks yang akan ditampilkan setelah pesan bantuan utama, atau dengan menggunakan Prog
Kami dapat menentukan nama program yang akan ditampilkan dalam konteks yang sama (secara default sys.Argv [0] digunakan).
Menambahkan parameter posisi
Sekarang saatnya menambahkan parameter posisi pertama kami ke skrip. Dalam hal ini kami akan menambahkan parameter "printme", yaitu string yang akan dicetak oleh skrip pengujian kami. Kami mencapai ini dengan menggunakan add_argument ()
Metode objek parser yang kami inisialisasi di atas:
parser.add_argument ('printme', help = "string yang akan dicetak")
Argumen pertama yang kami berikan kepada metode ini adalah nama parameter, dan yang kedua, opsional, adalah membantu
. Menggunakan kata kunci ini, kami dapat menentukan deskripsi untuk parameter yang akan ditampilkan dalam pesan bantuan yang dihasilkan oleh ArgParse.
Penting untuk memperhatikan bahwa secara default parameter akan dianggap sebagai string: untuk menentukan tipe data lain, kita harus menggunakan jenis
kata kunci. Misalnya, jika kami ingin argumen kami dikonversi menjadi bilangan bulat, kami akan menentukannya dengan cara ini:
parser.add_argument ('printme', type = int)
Setelah kami menambahkan parameter kami, kami harus memohon parse_args ()
Metode objek parser. Metode ini akan mengembalikan instance dari Argparse.Namespace
Kelas: Parameter Parsed akan disimpan sebagai atribut dari contoh ini. Akhirnya kita dapat menambahkan baris untuk mencetak variabel. Pada titik ini skrip harus terlihat seperti ini:
#!/usr/bin/env python impor argparse if __name__ == '__main__': # inisialisasi parser parser = argparse.ArgumentParser (deskripsi = "Skrip sederhana untuk menunjukkan penggunaan argparse") # Tambahkan parser parameter posisional.add_argument ('printme', help = "string yang akan dicetak") # parse argumen argumen = parser.parse_args () # akhirnya mencetak cetak string yang dilewati (argumen.printme)
Menyalin Mari kita jalankan:
$ ./printerscript.py "halo dunia!" Halo Dunia!
String yang kami lewati telah dicetak telah diharapkan. Tapi bagaimana jika kami tidak menyediakannya? Pesan bantuan akan ditunjukkan, menggambarkan skrip penggunaan yang benar:
$ ./printerscript.PY USAGE: Printerscript.py [-h] printerscript printme.PY: Kesalahan: terlalu sedikit argumen
Menambahkan parameter opsional
Parameter opsional tidak wajib untuk penggunaan skrip, tetapi mereka digunakan untuk memodifikasi perilakunya. Argparse mengenalinya ketika melihat bahwa tanda hubung disediakan dalam deskripsi, jadi misalnya:
parser.add_Argument ('-r', '--repeat', help = "jumlah kali untuk mencetak string", type = int, default = 1)
Menyalin Nama parameter diawali dengan tanda hubung (kami dapat menentukan versi pendek dan parameter panjang). Dalam hal ini kami menambahkan parameter opsional --mengulang
Yang menentukan berapa kali string harus dicetak. Kami juga menggunakan bawaan
kata kunci. Ini sangat penting, karena melalui itu, kita dapat menentukan nilai yang akan diasumsikan oleh atribut jika parameter yang tidak disediakan secara eksplisit saat memanggil skrip.
Pada titik ini, untuk memverifikasi bahwa parameter berfungsi seperti yang diharapkan, yang harus kami lakukan adalah memodifikasi skrip kami untuk mengulangi pencetakan string untuk beberapa kali yang ditentukan, oleh karena itu kami melampirkan mencetak()
berfungsi sedikit untuk loop
:
untuk saya dalam jangkauan (0, argumen.Ulangi): cetak (argumen.printme)
Menyalin Ayo coba:
$ ./printerscript.py - -Repeat = 3 "Halo dunia!" Halo Dunia! Halo Dunia! Halo Dunia!
Semua berjalan seperti yang diharapkan. Selain itu, pesan bantuan juga telah diperbarui, dan sekarang termasuk deskripsi parameter opsional baru:
./printerscript.PY --Shelp Usage: Printerscript.py [-h] [-r ulangi] printme skrip sederhana untuk menunjukkan argumen positional penggunaan argparse: printme string yang akan dicetak argumen opsional: -h, --help menunjukkan pesan bantuan ini dan keluar -REEPE kali untuk mencetak string
Seperti yang dikatakan di atas, kapan Argparse
melihat bahwa parameter diawali dengan tanda hubung, itu mengasumsikan bahwa itu adalah opsional. Untuk memodifikasi perilaku ini dan “menyatakan” itu wajib, kita dapat menggunakan diperlukan
Kata kunci saat menambahkan parameter, dalam formulir: diperlukan = benar
.
Kata kunci "dest"
Biasanya nilai yang disediakan untuk parameter akan disimpan sebagai atribut yang dinamai setelah argumen pertama yang diberikan kepada add_argument ()
Metode dalam kasus parameter posisi, atau opsi string panjang pertama (dengan tanda hubung dihapus: string -PePeat akan menjadi atribut 'ulangi') dalam kasus parameter opsional. Dalam kasus terakhir, jika opsi string panjang tidak tersedia, yang pendek digunakan. Itu dest
Kata kunci memungkinkan kami untuk menentukan nama atribut khusus alih -alih mengandalkan perilaku ini.
Kata kunci "tindakan"
Saat menggunakan add_argument ()
Metode kita dapat menentukan perilaku untuk digunakan untuk opsi yang diuraikan dengan menggunakan kata kunci lain: tindakan
. Tindakan default adalah menetapkan nilai yang diturunkan ke atribut yang sesuai. Dalam hal naskah kecil kami, misalnya, nilai yang disediakan untuk --mengulang
parameter, akan ditugaskan ke atribut 'ulangi' dari Argparse.Namespace
kelas setelah argumen diuraikan. Namun, perilaku ini juga dapat dimodifikasi. Mari kita jelaskan opsi utama lainnya secara singkat:
STORE_TRUE DAN STORE_FALSE
Dengan menentukan tindakan ini, kami pada dasarnya mengatakan bahwa parameter tidak memerlukan argumen: BENAR
akan ditetapkan sebagai nilai ke atribut yang sesuai jika opsi disediakan, atau PALSU
jika tidak. STORE_TRUE
Dan STORE_FALSE
akan memberikan nilai default masing -masing BENAR
Dan PALSU
.
STORE_CONST
Ini mirip dengan opsi di atas, tetapi dengan menggunakannya sebagai nilai untuk tindakan
kata kunci, bukan boolean, a konstan
Nilai akan ditetapkan ke atribut jika parameter digunakan. Nilai ini ditentukan sendiri dengan menggunakan const
Kata kunci:
parser.add_argument ("-option acak", action = "store_const", const = yourvalue)
menambahkan
Jika menambahkan
digunakan sebagai nilai dari tindakan
Kata kunci, daftar akan dibuat dan direferensikan oleh atribut parameter yang sesuai: Nilai yang disediakan akan ditambahkan padanya. Ini berguna jika parameter disediakan lebih dari sekali:
parser.add_argument ('-random-option', action = "append")
append_const
Sama seperti saat menggunakan menambahkan
, Nilai akan ditambahkan ke daftar yang dirujuk oleh atribut parameter. Perbedaannya adalah bahwa dalam hal ini, nilainya tidak disediakan oleh pengguna, tetapi dinyatakan saat menambahkan parameter, sekali lagi, melalui const
Kata kunci:
parser.add_argument ('--randomoption', action = "append_const", const = "Nilai untuk ditambahkan")
Menyalin Parameter opsional yang saling eksklusif
Dalam situasi tertentu kita mungkin perlu membuat beberapa opsi yang saling eksklusif. Itu Argparse
Modul memungkinkan kita menyelesaikan tugas ini dengan cara yang sangat mudah. Pada dasarnya apa yang akan kita lakukan adalah membuat grup opsi terpisah menggunakan add_mutuals_exclusive_group ()
metode objek parser, dan tambahkan argumen kami ke dalamnya. Misalnya:
parser = argparse.ArgumentParser (); # Buat grup kami dari argumen yang saling eksklusif Bersama.add_mutuals_exclusive_group () Bersama.add_argument ("-foo", help = "foo tidak termasuk bilah") Bersama.add_argument ("-bar", help = "bar tidak termasuk foo")
Menyalin Satu hal yang perlu diperhatikan adalah menjadi bagian dari a Mutuals_exclusive_group
Argumen harus opsional, oleh karena itu argumen posisi, atau argumen yang Anda tentukan sebagaimana diperlukan (diperlukan = benar
) tidak diperbolehkan di dalamnya.
Pada titik ini Anda harus memiliki gagasan tentang caranya Argparse
Pekerjaan. Namun, kami hanya menggaruk permukaan apa yang ditawarkan modul ini: untuk deskripsi lengkap dari semua fungsinya, silakan lanjutkan dan baca dokumentasinya, Anda tidak akan menyesalinya. Scripting yang bagus!
Tutorial Linux Terkait:
- Bash Script: Bendera Penggunaan dengan Contoh Argumen
- Hal -hal yang harus diinstal pada ubuntu 20.04
- Perintah Linux: 20 perintah terpenting teratas yang Anda butuhkan untuk…
- Perintah Linux Dasar
- Cara Membangun Aplikasi Tkinter Menggunakan Objek Berorientasi…
- Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
- Menguasai loop skrip bash
- Cara mencetak pohon direktori menggunakan linux
- Pengantar Otomatisasi Linux, Alat dan Teknik
- Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?