Cara Menggunakan Argparse Untuk Menguraikan Parameter Skrip Python
- 4052
- 185
- Clarence Powlowski
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 menggunakansudo
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?