Python Fire kısa çizgisi ve alt çizgi

Oct 16 2020

Python paketi Fire, python komut dosyalarını komut satırından başlatmak için çok kullanışlıdır. Yaygın bir şey, birden çok kelimeden oluşan argümanlara sahip olmaktır, örneğin 3 ortak yolla yazılabilen kedi adı:

  • kedinin adı
  • kedinin_ adı
  • kedinin adı

Birincisi hemen hemen her şeyle uyumluyken, ikincisi bash'de ( POSIX tarzı işletim sistemlerinde komut satırı seçenekleri alt çizgi stili olmalı mı? ) Ve üçüncüsü python'da (python neden tirelerin kullanımına izin vermiyor? fonksiyon ve değişken isimleri? ).

Buradaki sorun, varsayılan olarak yangının argüman adını python kodundan almasıdır; bu, eğer python kodum şöyle görünüyorsa:

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)

sonra onu komut satırından (veya bir bash betiğinden) çağırmak için

python script.py --name_of_cat Bob

Şu anda onu kullanma şeklim bu, ancak bu yetersiz geliyor. Burada en iyi uygulamanın ne olduğuna dair bir fikriniz var mı?

Not: python script.py --name-of-cat Bobpython değişken adlarında tire işareti olamayacağı için imkansız olurdu.

Yanıtlar

2 JonathanDayton Oct 24 2020 at 04:07

Görünüşe göre, muhtemelen bu kod satırı nedeniyle kısa çizgiler veya alt çizgilerle çalışıyor . Komut dosyanızı kullanarak:

> 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

Bu aynı zamanda burada Yangın belgelerinde belirtilmiştir:

A örneğini oluşturmak Buildingve ardından climb_stairsişlevi çalıştırmak için aşağıdaki komutların tümü geçerlidir:

$ 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"

Kısa çizgilerin ve alt çizgilerin ( -ve _) üye adlarında ve bayrak adlarında birbirinin yerine kullanılabildiğini fark edeceksiniz .

Bununla birlikte, oluşturulan yardım metni alt çizgili bir bayrak istiyor gibi görünüyor:

> 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

Benim tavsiyem, kendiniz için hızlı bir komut dosyası hazırlıyorsanız , Fire harikadır , ancak dağıtılacak veya daha karmaşık bir şey yapıyorsanız, argparse ( stdlib'e dahil) gibi daha yapılandırılabilir bir çerçeve kullanmak daha iyidir veya tıklayın (kişisel favorim). İşte Fire'ın kendi belirlediği faydalar listesi; kullanım durumunuz daha karmaşıksa, başka bir kitaplık daha iyi olabilir.

Simplecode Oct 19 2020 at 20:25

FireModül hakkında emin değilim ama nameofcattip sözdizimini kullandığımız bir python komut satırı uygulamam var . Komut dosyası için argüman olarak toplam 17 aplhabets içeren bir kelimeyi geçiyorum ve herhangi bir hipen veya alt çizgi kullanmıyorum.