PythonのCLIツールを作るためのライブラリ Click で割と忘れがちなノウハウ (忘れるたびに調べてる) を紹介します.
オプション名と仮引数名を別のものにしたい
複数の値をとれるオプションを定義する場合, 次のように書きます (他にもあったと思いますが).
@click.command()
@click.option("--keyword", "-k", type=str, multiple=True)
def main(keyword: tuple[str]):
click.echo(keyword)
実行例.
$ sample -k sapporo -k hokkaido
('sapporo', 'hokkaido')
これでいいといえばそうなのですが, 仮引数名「keyword」は「keywords」にしたくなるのが人情ではないでしょうか. しかし, 単純にはいきません. 仮引数名だけを任意の名前にすると, 次のエラーが出てしまいます.
TypeError: main() got an unexpected keyword argument 'keyword'
オプション名から仮引数名を類推してマッピングしにいくようになっているためです.
この場合, オプション名のあとに, 次のように引数を加えることで解決できます.
@click.command()
@click.option("--keyword", "-k", "keywords", type=str, multiple=True)
def main(keywords: tuple[str]):
click.echo(keywords)
参考
このへんに書かれてます. オプション名がPythonの予約語 (fromとか) のときには, この指定が必須になりそうです.