0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Click (Python) でオプション名と仮引数名を別にする

Posted at

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とか) のときには, この指定が必須になりそうです.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?