【対話オプション】Clickのprompt

OSWindows 10 64bit
Python3.10.2
Click8.1.3

概要

clickは、シンプルでありながら高機能なオプション解析ライブラリです。
clickのインストールと基本的な使い方は以下の記事をご覧ください。

【シンプル&高機能】オプション解析ライブラリClickのご紹介【シンプル&高機能】オプション解析ライブラリClickのご紹介

本記事ではclickのpromptオプションについてご紹介します。

promptオプション

promptオプションは、オプション引数が渡されなかった場合、標準入力によって入力を促します。

promptオプションを有効にするには、2つ方法があります。

  • promptTrueを設定
  • promptに入力を促すメッセージを文字列で設定

promptTrueを設定

@click.optionメソッドの引数promptTrueを設定することで、promptオプションを有効にできます。
この場合、入力を促すメッセージはオプション名が採用されます。

Python
import click

@click.command()
@click.option('-opt', '--option', prompt=True)
def main(option):
    click.echo(f'{option=}, {type(option)=}')

if __name__ == '__main__':
    main()
Shell
> python test.py
Option: 18
option='18', type(option)=<class 'str'>

Option: となっている部分が入力を促すメッセージです。この後に入力することでoptionオブジェクトに格納されます。

通常通りオプション引数を渡すこともできます。

Shell
> python test.py -opt 18
option='18', type(option)=<class 'str'>

promptに入力を促すメッセージを文字列で設定

@click.optionメソッドの引数promptに入力を促すメッセージを設定することで、promptオプションを有効にできます。
この場合、入力を促すメッセージには設定されたメッセージが表示されます。

Python
import click

@click.command()
@click.option('-opt', '--option', prompt="入力してください")
def main(option):
    click.echo(f'{option=}, {type(option)=}')

if __name__ == '__main__':
    main()
Shell
> python test.py     
入力してください: 18
option='18', type(option)=<class 'str'>

パスワードprompt

パスワードなど入力文字列を隠したい場合があります。そのようなときは、パスワードpromptが使えます。
入力文字列を隠す場合は@click.optionの引数hide_inputTrueに設定します。

Python
import click

@click.command()
@click.option('-opt', '--option', prompt=True, hide_input=True)
def main(option):
    click.echo(f'{option=}, {type(option)=}')

if __name__ == '__main__':
    main()
Shell
> python test.py
Option: 
option='18', type(option)=<class 'str'>

Option: の後に18と入力していますが表示されていません。

確認のために再入力を促すこともよくあります。その場合引数confirmation_promptTrueに設定します。

Python
import click

@click.command()
@click.option('-opt', '--option', prompt=True, confirmation_prompt=True)
def main(option):
    click.echo(f'{option=}, {type(option)=}')

if __name__ == '__main__':
    main()
Shell
> python test.py
Option: 18
Repeat for confirmation: 19
Error: The two entered values do not match.
Option: 18
Repeat for confirmation: 18
option='18', type(option)=<class 'str'>

再入力時にマッチしない場合は、再度入力を促されます。

もちろん、引数hide_inputと併用できます。

Python
import click

@click.command()
@click.option('-opt', '--option', prompt=True, hide_input=True, confirmation_prompt=True)
def main(option):
    click.echo(f'{option=}, {type(option)=}')

if __name__ == '__main__':
    main()
Shell
> python test.py
Option: 
Repeat for confirmation:
option='18', type(option)=<class 'str'>

@click.password_optionメソッドでデコレートするでパスワードを入力するオプションを設定できます。

Python
import click

@click.command()
@click.password_option()
def main(password):
    click.echo(f'{password=}, {type(password)=}')

if __name__ == '__main__':
    main()
Shell
> python test.py
Password: 
Repeat for confirmation:
password='18', type(password)=<class 'str'>

まとめ

本記事ではオプション解析ライブラリclickのpromptオプションをご紹介しました。promptオプションは、オプションが指定されなかった場合に、入力を促すメッセージを表示します。対話的にオプション引数を渡したい場合などに便利です。

また、入力を隠したり再確認用のメッセージを表示したりすることができるため、パスワード用のpromptオプションも簡単に設定できます。

clickに関するほかの記事は以下をご覧ください。

参考

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です