Cara menggunakan argparse untuk parse parameter skrip python

Cara menggunakan argparse untuk parse parameter skrip python

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 menggunakan sudo 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?