Skip to content

Python の Click でコマンドライン引数を処理する

Clickargparse のようにコマンドライン引数を処理して、CLI ツールを作ることが出来ます。 今回は Click の簡単な使い方をメモしておきます。

検証環境

対象 バージョン
macOS 14.5
Python 3.11.9

インストール

uv pip install click

公式サイトのチュートリアル

サンプルコード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import click


@click.command()
@click.option("--count", default=1, help="Number of greetings.")
@click.option("--name", prompt="Your name", help="The person to greet.")
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for _ in range(count):
        click.echo(f"Hello, {name}!")


if __name__ == "__main__":
    hello()

実行結果

$ python3 sample.py
Your name: Alice
Hello, Alice!
$ python3 sample.py --count 3
Your name: Bob
Hello, Bob!
Hello, Bob!
Hello, Bob!

フォントに色を付ける

フォントや背景に色を付けることが出来ます。

サンプルコード

1
2
3
4
5
import click

click.echo(click.style("Hello World!", fg="green"))
click.echo(click.style("Some more text", bg="blue", fg="white"))
click.echo(click.style("ATTENTION", blink=True, bold=True))

実行結果

file

ヘルプに docstring を表示する

docstring の内容をヘルプに表示することが出来ます。

サンプルコード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import click


@click.command()
@click.option("--count", default=1, help="number of greetings")
@click.argument("name")
def hello(count, name):
    """This script prints hello NAME COUNT times."""
    for x in range(count):
        click.echo(f"Hello {name}!")


if __name__ == "__main__":
    hello()

実行結果

$ python3 help.py --help
Usage: help.py [OPTIONS] NAME

  This script prints hello NAME COUNT times.

Options:
  --count INTEGER  number of greetings
  --help           Show this message and exit.

サブコマンドを実装する

サブコマンドのことを click では Nesting Commands と呼ぶようです。

サンプルコード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import click


@click.group()
def cli():
    pass


@cli.command()
def initdb():
    click.echo("Initialized the database")


@cli.command()
def dropdb():
    click.echo("Dropped the database")


if __name__ == "__main__":
    cli()

実行結果

$ python3 subcommand.py --help
Usage: subcommand.py [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  dropdb
  initdb
$ python3 subcommand.py dropdb
Dropped the database
$ python3 subcommand.py initdb
Initialized the database