PythonFireハイフンとアンダースコア
pythonパッケージFireは、コマンドラインからpythonスクリプトを起動するのに非常に便利です。1つの一般的なことは、複数の単語で構成される引数を持つことです。たとえば、3つの一般的な方法で記述できる猫の名前です。
- nameofcat
- name_of_cat
- 猫の名前
最初のものはほとんどすべてと互換性がありますが、2番目のものはbashでは避ける必要があり(POSIXスタイルのオペレーティングシステムのコマンドラインオプションはアンダースコアスタイルにする必要がありますか?)、3番目のものはpythonで(なぜpythonは内でハイフンの使用を許可しないのですか?)関数名と変数名?)。
ここでの問題は、デフォルトで、fireがPythonコードから引数名を取得することです。つまり、Pythonコードが次のようになっている場合です。
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)
次に、コマンドラインから(またはbashスクリプトから)呼び出すには、次のようにします。
python script.py --name_of_cat Bob
これは私が現在それを使用している方法ですが、これは最適ではないと感じています。ここでのベストプラクティスについて何か考えはありますか?
PS:python script.py --name-of-cat BobPythonは変数名にハイフンを含めることができないため、不可能です。
回答
おそらくこのコード行が原因で、ハイフンまたはアンダースコアのいずれかで機能するようです。スクリプトの使用:
> 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
これは、Fireのドキュメントにも記載されています。
をインスタンス化して
Buildingからclimb_stairs関数を実行するには、次のコマンドがすべて有効です。$ 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"ハイフンとアンダースコア(
-および_)は、メンバー名とフラグ名で交換可能であることに気付くでしょう。
ただし、生成されたヘルプテキストは、アンダースコア付きのフラグを要求しているようです。
> 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
自分で簡単なスクリプトを作成する場合はFireが最適ですが、分散型またはより複雑なものを作成する場合は、argparse(stdlibに含まれる)やより構成可能なフレームワークを使用することをお勧めします。クリック(私の個人的なお気に入り)。これがFireの自己申告によるメリットのリストです。ユースケースがより複雑な場合は、別のライブラリの方が適している可能性があります。
Fireモジュールについてはわかりませんが、nameofcat型構文を使用しているpythonコマンドラインアプリケーションがあります。スクリプトの引数として、合計で最大17個のパラメーターを含む単語を渡します。ハイフンやアンダースコアは使用しません。