### Pythonのコマンドラインツール作成用ライブラリ「Click」がすげぇ便利 --- Clickとは https://github.com/pallets/click --- CLIツールを作成するためのライブラリ - 標準ライブラリだと「argparse」 --- 何がいいのか →めっちゃ実装が楽 --- - argparse ``` import argparse def main(): parser = argparse.ArgumentParser(description='Simple argparse CLI') parser.add_argument('-n', '--name', dest='name', type=str, help='your name', required=True) args = parser.parse_args() print(f"Your name is {args.name}") if __name__ == '__main__': main() ``` --- - ArgumentParserクラスでコマンドラインパーサーを定義 - add_argumentメソッドでオプションを追加 - 作成したAugumentParserインスタンスからparse_argsメソッドで引数を取り出す --- - 実行してみる ``` % pipenv run python argparse_sample.py -n nishio Your name is nishio ``` --- - click ``` import click @click.command(help='Simple click CLI') @click.option('-n', '--name', 'name', type=str, help='your name', required=True) def main(name): print(f"Your name is {name}") if __name__ == '__main__': main() ``` --- - click.commandデコレータをメソッドに設定することで、コマンド指定時にコールするメソッドを決定 - click.optionデコレータによりオプションを追加 --- - 実行してみる ``` % pipenv run python click_sample.py -n nishio Your name is nishio ``` --- サブコマンドの実装も簡単 --- - argperser(サブコマンド) ``` import argparse def command_name(args): print(f"Your name is {args.name}") def get_parser(): parser = argparse.ArgumentParser(description='Subcommand argparse CLI') subparsers = parser.add_subparsers() name_parser = subparsers.add_parser('name', help='your name') name_parser.add_argument('-n', dest='name', type=str, required=True) name_parser.set_defaults(handler=command_name) return parser def main(): parser = get_parser() args = parser.parse_args() if hasattr(args, 'handler'): args.handler(args) else: parser.print_help() if __name__ == '__main__': main() ``` --- - add_subparsersメソッドにより子parserのグループを作成 - add_parserメソッドによりサブコマンドを作成 - サブコマンドをネスト - サブコマンドとコールする関数を紐付け --- - 実行してみる ``` % pipenv run python argparse_subcommand_sample.py name -n nishio Your name is nishio ``` --- - click(サブコマンド) ``` import click @click.group() def cmd(): pass @cmd.command(help='Subcommand argparse CLI') @click.option('-n', '--name', 'name', type=str, help='your name', required=True) def name(name): click.echo(f"Your name is {name}") def main(): cmd() if __name__ == '__main__': main() ``` --- - click.groupデコレータによりサブコマンドのグループを定義します。argparseと違ったサブコマンドのグループで共通処理を書ける - サブコマンドをネスト --- - 実行してみる ``` % pipenv run python click_subcommand_sample.py name -n nishio Your name is nishio ```
{"metaMigratedAt":"2023-06-15T19:09:50.313Z","metaMigratedFrom":"Content","title":"Untitled","breaks":true,"contributors":"[{\"id\":\"501938f7-150f-4a68-b27a-4907062f3c90\",\"add\":5103,\"del\":2537}]"}
    434 views