| OS | Windows 10 64bit |
| Python | 3.10.2 |
| Click | 8.1.3 |
clickは、シンプルでありながら高機能なオプション解析ライブラリです。
clickのインストールと基本的な使い方は以下の記事をご覧ください。
【シンプル&高機能】オプション解析ライブラリClickのご紹介
本記事ではclickのブールフラグオプションについてご紹介します。
ブールフラグオプションは、そのオプションが実行時に指定されていればTrueまたはFalseと解釈されます。
clickではブールフラグオプションの設定方法は以下の3通り用意されています。
'/'で区切るis_flagをTrueに設定confirmation_optionでデコレート
Trueとなるオプション名とFalseとなるオプション名をスラッシュで区切ることで、clickは自動的にブールフラグオプションとして認識されます。
以下はTrueとなるオプションに-y,--yesを、Falseとなるオプションには-n,--noと設定している例です。
import click
@click.command()
@click.option('-y/-n', '--yes/--no')
def main(yes):
click.echo(f'{yes=}, {type(yes)=}')
if __name__ == '__main__':
main()> python test.py -y
yes=True, type(yes)=<class 'bool'>
> python test.py -n
yes=False, type(yes)=<class 'bool'>どちらのオプションも指定しない場合は、デフォルトでFalseが格納されます。@click.optionメソッドのdefaultにTrueを設定することで、デフォルトをTrueにすることも可能です。
> python test.py
yes=False, type(yes)=<class 'bool'>また、Falseとなる部分のみ、つまり'/'の右部分のみの別名指定することも可能です。ただし、'/'の左部分に空白を入れる必要があります。
import click
@click.command()
@click.option('-y/-n', '--yes/--no', ' /--none')
def main(yes):
click.echo(f'{yes=}, {type(yes)=}')
if __name__ == '__main__':
main()> python test.py --none
yes=False, type(yes)=<class 'bool'>また、オプションにすでに'/'が含まれている場合は、';'で区切ることも可能です。
import click
@click.command()
@click.option('/yes;/no')
def main(yes):
click.echo(f'{yes=}, {type(yes)=}')
if __name__ == '__main__':
main()> python test.py /no
yes=False, type(yes)=<class 'bool'>@click.optionメソッドの引数is_flagをTrueに設定すると、そのオプションはフラグオプションとして認識されます。
import click
@click.command()
@click.option('-y', '--yes', is_flag=True)
def main(yes):
click.echo(f'{yes=}, {type(yes)=}')
if __name__ == '__main__':
main()> python test.py -y
yes=True, type(yes)=<class 'bool'>
> python test.py
yes=False, type(yes)=<class 'bool'>@click.optionメソッドの引数defaultをTrueに設定することで逆にすることもできます。
import click
@click.command()
@click.option('-n', '--no', is_flag=True, default=True)
def main(no):
click.echo(f'{no=}, {type(no)=}')
if __name__ == '__main__':
main()> python test.py -n
no=False, type(no)=<class 'bool'>
> python test.py
no=True, type(no)=<class 'bool'>@click.conrimation_optionでデコレートすることで、prompt付きのブールフラグオプションを設定できます。
import click
@click.command()
@click.confirmation_option()
def main():
click.echo('yesが選択されました。')
if __name__ == '__main__':
main()> python test.py
Do you want to continue? [y/N]: y
yesが選択されました。
> python test.py
Do you want to continue? [y/N]: n
Aborted!
【対話オプション】Clickのprompt
本記事では、オプション解析ライブラリclickのブールフラグオプションをご紹介しました。ブールフラグオプションはオプションがしていた場合TrueまたはFalseとして格納されるオプションです。フラグによって動作を変えたい場合に非常に便利です。
clickに関するほかの記事は以下をご覧ください。
-
【対話オプション】Clickのprompt
clickは、シンプルでありながら高機能なオプション解析ライブラリです。clickのインストールと基本的な使い…
-
[Yes/No]Clickのブールフラグオプション
clickは、シンプルでありながら高機能なオプション解析ライブラリです。clickのインストールと基本的な使い…
-
【文字列や整数だけではない】オプション解析ライブラリClickのtype指定
clickは、シンプルでありながら高機能なオプション解析ライブラリです。clickのインストールと基本的な使い…
コツコツさんのブログ 