Cara Menggunakan Argparse Untuk Menguraikan Parameter Skrip Python

Cara Menggunakan Argparse Untuk Menguraikan Parameter Skrip Python

Objektif

Belajar menggunakan modul Argparse untuk menghuraikan parameter skrip python dengan mudah

Keperluan

  • Pengetahuan asas konsep berorientasikan objek dan objek

Kesukaran

Mudah

Konvensyen

  • # - Memerlukan arahan Linux yang diberikan dengan keistimewaan akar sama ada
    secara langsung sebagai pengguna akar atau dengan menggunakan sudo perintah
  • $ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak

Pengenalan

Dalam artikel sebelumnya kita telah melihat bagaimana untuk menghuraikan argumen baris arahan menggunakan getOpts dalam konteks skrip bash (anda boleh mencari artikel di sini). Sekarang kita akan melihat bagaimana untuk mencapai tugas yang sama, dengan cara yang lebih kuat, ketika menulis skrip python.

Memulakan parser

Untuk mencapai matlamat kami, kami akan menggunakan modul python yang dipanggil Argparse. Ini akan membolehkan kami menentukan parameter baris arahan kami, dan secara automatik akan menghasilkan mesej bantuan skrip berdasarkannya. Oleh itu mari kita mulakan, kami akan memanggil skrip kami "Printerscript.py ”:

#!/usr/bin/env python import argparse jika __name__ == '__main__': # Inisialisasi parser parser = argparse.ArgumentParser (keterangan = "Skrip mudah untuk menunjukkan penggunaan argparse")
Salinan

Perkara pertama yang perlu dilakukan ialah, jelas, untuk mengimport Argparse modul. Selepas itu kami terus memulakan parser. The Penerangan Kata kunci, yang dihantar kepada pembina parser adalah pilihan, tetapi membolehkan kami menambah penerangan ringkas skrip apabila mesej bantuan dipaparkan.

Terdapat kata kunci lain yang boleh kita gunakan untuk menyesuaikan lagi tingkah laku parser: contohnya menyediakan Epilog kata kunci kami dapat memberikan teks yang akan dipaparkan selepas mesej bantuan utama, atau dengan menggunakan Prog Kami dapat menentukan nama program yang akan dipaparkan dalam konteks yang sama (secara lalai sys.argv [0] digunakan).



Menambah parameter posisional

Kini tiba masanya untuk menambah parameter posisional pertama kami ke skrip. Dalam kes ini, kami akan menambah parameter "printme", iaitu rentetan yang akan dicetak oleh skrip ujian kami. Kami mencapai ini dengan menggunakan add_argument () Kaedah objek parser yang kita jalankan di atas:

parser.add_argument ('printme', membantu = "rentetan yang akan dicetak")

Hujah pertama yang kami berikan kepada kaedah adalah nama parameter, dan yang kedua, pilihan, adalah tolong. Menggunakan kata kunci ini, kami dapat menentukan keterangan untuk parameter yang akan dipaparkan dalam mesej bantuan yang dihasilkan oleh ArgParse.

Penting untuk melihat bahawa secara lalai parameter akan dianggap sebagai rentetan: Untuk menentukan jenis data lain, kita mesti menggunakan Jenis kata kunci. Sebagai contoh, jika kita mahu hujah kita ditukar kepada integer, kita akan menetapkannya dengan cara ini:

parser.add_argument ('printme', type = int)

Sebaik sahaja kami menambah parameter kami, kami mesti memanggil parse_args () kaedah objek parser. Kaedah ini akan mengembalikan contoh Argparse.Ruang nama Kelas: Parameter yang dihuraikan akan disimpan sebagai atribut contoh ini. Akhirnya kita dapat menambah garis untuk mencetak pembolehubah. Pada ketika ini skrip harus kelihatan seperti ini:

#!/usr/bin/env python import argparse jika __name__ == '__main__': # Inisialisasi parser parser = argparse.ArgumentParser (keterangan = "Skrip mudah untuk menunjukkan penggunaan argparse") # tambahkan parameter parameter kedudukan.add_argument ('printme', membantu = "rentetan yang akan dicetak") # menghuraikan argumen argumen = parser.parse_args () # akhirnya mencetak cetakan rentetan yang diluluskan (argumen.printme)
Salinan

Mari laksanakannya:

$ ./Printerscript.py "hello dunia!" Hai dunia! 

Rentetan yang kami lalui telah dicetak telah dijangka. Tetapi bagaimana jika kita tidak memberikannya? Mesej bantuan akan ditunjukkan, menerangkan penggunaan skrip yang betul:

$ ./Printerscript.Penggunaan Py: Printerscript.py [-h] printme printerscript.PY: Ralat: Terlalu sedikit hujah 


Menambah parameter pilihan

Parameter pilihan tidak wajib untuk penggunaan skrip, tetapi mereka digunakan untuk mengubah suai kelakuannya. Argparse mengiktiraf mereka apabila melihat bahawa tanda hubung disediakan dalam keterangan, jadi sebagai contoh:

parser.add_argument ('-r', '--repeat', membantu = "bilangan kali untuk mencetak rentetan", type = int, lalai = 1)
Salinan

Nama parameter diawali dengan tanda hubung (kita boleh menentukan kedua -dua versi parameter pendek dan panjang). Dalam kes ini kami menambah parameter pilihan --ulangi yang menentukan berapa kali rentetan mesti dicetak. Kami juga menggunakan lalai kata kunci. Ini sangat penting, kerana melalui itu, kita dapat menentukan nilai atribut yang akan menganggap jika parameter itu tidak disediakan secara eksplisit ketika memanggil skrip.

Pada ketika ini, untuk mengesahkan bahawa parameter berfungsi seperti yang diharapkan, yang perlu kita lakukan adalah mengubah suai skrip kami untuk mengulangi percetakan rentetan untuk bilangan kali yang ditentukan, oleh itu kami melampirkan Cetak () berfungsi sedikit untuk gelung:

untuk saya dalam julat (0, hujah.ulangi): cetak (argumen.printme) 
Salinan

Mari mencubanya:

$ ./Printerscript.py -repeat = 3 "hello dunia!" Hai dunia! Hai dunia! Hai dunia! 

Semua pergi seperti yang diharapkan. Di samping itu, mesej bantuan juga telah dikemas kini, dan kini termasuk penerangan parameter pilihan baru:

./Printerscript.PY -HELP PENGGUNAAN: PRINTERSCRIPT.py [-h] [-r ulangan] printme script mudah untuk menunjukkan argumed arguments penggunaan argparse: printme rentet masa untuk mencetak rentetan 

Seperti yang dikatakan di atas, bila Argparse melihat bahawa parameter diawali dengan tanda hubung, ia mengandaikan bahawa ia adalah pilihan. Untuk mengubah suai tingkah laku ini dan "mengisytiharkan" ia sebagai wajib, kita boleh menggunakan diperlukan Kata kunci semasa menambah parameter, dalam bentuk: diperlukan = benar.

Kata kunci "Dest"

Biasanya nilai yang disediakan untuk parameter akan disimpan sebagai atribut yang dinamakan sempena hujah pertama yang diberikan kepada add_argument () kaedah dalam kes parameter kedudukan, atau pilihan rentetan panjang pertama (dengan tanda hubung dikeluarkan: rentetan -rentetan akan menjadi atribut 'ulang') dalam hal parameter pilihan. Dalam kes yang kedua, jika pilihan rentetan panjang tidak tersedia, yang pendek digunakan. The Dest Kata kunci membolehkan kami menentukan nama atribut tersuai dan bukannya bergantung pada tingkah laku ini.



Kata kunci "tindakan"

Apabila menggunakan add_argument () Kaedah kita boleh menentukan tingkah laku untuk digunakan untuk pilihan parsed dengan menggunakan kata kunci lain: tindakan. Tindakan lalai adalah untuk memberikan nilai lulus kepada atribut yang sepadan. Dalam kes skrip kecil kami, contohnya, nilai yang disediakan untuk --ulangi parameter, akan diberikan kepada atribut 'ulang' Argparse.Ruang nama kelas sebaik sahaja argumen dihuraikan. Walau bagaimanapun, tingkah laku ini juga boleh diubah suai. Mari kita terangkan pilihan utama lain secara ringkas:

store_true dan store_false

Dengan menyatakan tindakan ini, kita pada dasarnya mengatakan bahawa parameter tidak memerlukan hujah: Benar akan diberikan sebagai nilai kepada atribut yang sepadan jika pilihan disediakan, atau Salah jika tidak. store_true dan store_false masing -masing akan memberikan nilai lalai masing -masing Benar dan Salah.

store_const

Ini serupa dengan pilihan di atas, tetapi dengan menggunakannya sebagai nilai untuk tindakan kata kunci, bukan boolean, a malar nilai akan diberikan kepada atribut jika parameter digunakan. Nilai ini ditentukan dengan menggunakan const Kata kunci:

parser.add_argument ("-rawak-pilihan", tindakan = "store_const", const = yourvalue)
tambah

Jika tambah digunakan sebagai nilai dari tindakan Kata kunci, senarai akan dibuat dan dirujuk oleh atribut parameter yang sepadan: nilai yang disediakan akan dilampirkan kepadanya. Ini berguna sekiranya parameter disediakan lebih dari sekali:

parser.add_argument ('-rawak-pilihan', tindakan = "append")
append_const

Sama seperti semasa menggunakan tambah, Nilai akan ditambahkan ke senarai yang dirujuk oleh atribut parameter. Perbezaannya ialah dalam kes ini, nilai itu tidak disediakan oleh pengguna, tetapi diisytiharkan ketika menambahkan parameter, sekali lagi, melalui const Kata kunci:

parser.add_argument ('-randomoption', action = "append_const", const = "nilai untuk ditambah")
Salinan

Parameter pilihan yang saling eksklusif

Dalam keadaan tertentu, kita mungkin perlu membuat beberapa pilihan yang saling eksklusif. The Argparse modul membolehkan kita mencapai tugas ini dengan cara yang berbeza -beza. Pada dasarnya apa yang akan kita lakukan ialah membuat kumpulan pilihan yang berasingan menggunakan add_mutualy_exclusive_group () kaedah objek parser, dan tambahkan hujah kami kepadanya. Sebagai contoh:

parser = argparse.ArgumentParser (); # Buat kumpulan argumen eksklusif bersama kami Mutly_exclusive = parser.add_mutualy_exclusive_group () mutly_exclusive.add_argument ("-foo", membantu = "foo tidak termasuk bar") mutly_exclusive.add_argument ("-bar", membantu = "bar tidak termasuk foo")
Salinan

Satu perkara yang perlu diperhatikan ialah menjadi sebahagian daripada Mutly_exclusive_group Argumen mestilah pilihan, oleh itu hujah -hujah kedudukan, atau hujah yang anda tentukan seperti yang diperlukan (diperlukan = benar) tidak dibenarkan di dalamnya.

Pada ketika ini anda harus mempunyai idea bagaimana Argparse berfungsi. Walau bagaimanapun, kami hanya menggaruk permukaan apa yang ditawarkan oleh modul ini: Untuk penerangan lengkap semua fungsinya, sila teruskan dan baca dokumentasi, anda tidak akan menyesalinya. Skrip yang bagus!

Tutorial Linux Berkaitan:

  • Skrip Bash: Penggunaan Bendera dengan Contoh Argumen
  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Perintah Linux: Top 20 Perintah Paling Penting yang Anda Perlu ..
  • Perintah Linux Asas
  • Cara Membina Aplikasi TKInter Menggunakan Objek Berorientasikan ..
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Menguasai Gelung Skrip Bash
  • Cara mencetak pokok direktori menggunakan linux
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?