Tanda hubung vs garis bawah Python Fire
Paket python Firesangat berguna untuk meluncurkan skrip python dari baris perintah. Satu hal yang biasa terjadi adalah argumen yang dibuat dari banyak kata, misalnya nama kucing yang dapat ditulis dengan 3 cara umum:
- nameofcat
- name_of_cat
- nama-kucing
Sementara yang pertama kompatibel dengan hampir semua hal, yang kedua harus dihindari di bash ( Haruskah opsi baris perintah dalam sistem operasi gaya POSIX menjadi gaya garis bawah? ) Dan yang ketiga dengan python ( Mengapa python melarang penggunaan tanda hubung di dalam fungsi dan nama variabel? ).
Masalahnya di sini adalah bahwa secara default api akan mengambil nama argumen dari kode python, yang berarti jika kode python saya terlihat seperti ini:
script.py:
import fire
def main(name_of_cat='Steve'):
print(f'The name of the cast is {name_of_cat}')
if __name__ == '__main__':
fire.Fire(main)
kemudian untuk memanggilnya dari baris perintah (atau dari skrip bash), seseorang akan melakukannya
python script.py --name_of_cat Bob
Inilah cara saya menggunakannya saat ini, tetapi ini terasa kurang optimal. Ada ide tentang praktik terbaik apa yang ada di sini?
PS: python script.py --name-of-cat Bobtidak mungkin karena python tidak dapat memiliki tanda hubung dalam nama variabel.
Jawaban
Sepertinya ini berfungsi dengan tanda hubung atau garis bawah, mungkin karena baris kode ini . Menggunakan skrip Anda:
> python .\script.py --name_of_cat Bob
The name of the cast is Bob
> python .\script.py --name-of-cat Bob
The name of the cast is Bob
Ini juga dicatat di sini di dokumen Fire:
Untuk membuat instance
Buildingdan kemudian menjalankanclimb_stairsfungsinya, semua perintah berikut ini valid:$ python example.py --name="Sherrerd Hall" --stories=3 climb_stairs 10 $ python example.py --name="Sherrerd Hall" climb_stairs --stairs_per_story=10 $ python example.py --name="Sherrerd Hall" climb_stairs --stairs-per-story 10 $ python example.py climb-stairs --stairs-per-story 10 --name="Sherrerd Hall"Anda akan melihat bahwa tanda hubung dan garis bawah (
-dan_) dapat dipertukarkan dalam nama anggota dan nama bendera.
Namun, teks bantuan yang dihasilkan tampaknya meminta bendera dengan garis bawah:
> python .\script.py -h
INFO: Showing help with the command 'script.py -- --help'.
NAME
script.py
SYNOPSIS
script.py <flags>
FLAGS
--name_of_cat=NAME_OF_CAT
Rekomendasi saya adalah jika Anda membuat skrip cepat untuk diri Anda sendiri, Api itu luar biasa, tetapi jika Anda membuat sesuatu untuk didistribusikan atau lebih kompleks, lebih baik menggunakan kerangka kerja yang lebih dapat dikonfigurasi, seperti argparse (disertakan dalam stdlib) atau klik (favorit pribadi saya). Berikut adalah daftar manfaat Fire; jika kasus penggunaan Anda lebih kompleks, pustaka lain mungkin lebih baik.
Tidak yakin tentang Firemodul tetapi saya memiliki aplikasi baris perintah python di mana kami menggunakan nameofcatsintaks tipe. Saya menyampaikan kata dengan total 17 aplhabets di dalamnya sebagai argumen untuk skrip dan saya tidak menggunakan tanda hubung atau garis bawah.