Получить аргументы CLI в приложении Click ⇐ Python
-
Anonymous
Получить аргументы CLI в приложении Click
В приложении click из Context мы можем получить имя команды, ее полный путь и проанализированные параметры, как показано ниже
Изменить: обновлен вопрос в соответствии с комментариями @julaine и @Marco Parola
Содержимое сценария
abc:
#!/home/user/.bin/python-tools/venv/bin/python3 импортировать систему импортировать клик @click.group("abc") защита abc(): """Помощь ABC""" проходить @abc.command("тест") @click.option("-o", "--option") @click.option("-o2", "--option2", default="two") def test(опция, опция2): """Получить информацию командного интерфейса командной строки""" ctx = click.get_current_context() print("Имя команды:", ctx.info_name) print("Путь к команде:", ctx.command_path) print("Параметры команды:", ctx.params) print("Аргументы CLI с помощью Click:", "???") # Попробуйте использовать click.Context.args print("\nОставшиеся аргументы команды:", ctx.args) # Попробуйте это с sys.argv cmd_path = click.get_current_context().command_path.split() cli_args = sys.argv[len(cmd_path):] print("Аргументы CLI с sys.argv:", " ".join(cli_args)) если __name__ == "__main__": абв() Получаем ответ:
❯ abc test -o 1 Имя команды: тест Путь команды: abc test Параметры команды: {'option': '1', 'option2': 'two'} Аргументы CLI с помощью Click: ??? Оставшиеся аргументы команды: [] Аргументы CLI с sys.argv: -o 1 Можно ли получить неанализированные аргументы CLI из самого click, т. е. без sys.argv? В приведенном выше примере должно вернуться:
Аргументы CLI с помощью Click: -o 1
В приложении click из Context мы можем получить имя команды, ее полный путь и проанализированные параметры, как показано ниже
Изменить: обновлен вопрос в соответствии с комментариями @julaine и @Marco Parola
Содержимое сценария
abc:
#!/home/user/.bin/python-tools/venv/bin/python3 импортировать систему импортировать клик @click.group("abc") защита abc(): """Помощь ABC""" проходить @abc.command("тест") @click.option("-o", "--option") @click.option("-o2", "--option2", default="two") def test(опция, опция2): """Получить информацию командного интерфейса командной строки""" ctx = click.get_current_context() print("Имя команды:", ctx.info_name) print("Путь к команде:", ctx.command_path) print("Параметры команды:", ctx.params) print("Аргументы CLI с помощью Click:", "???") # Попробуйте использовать click.Context.args print("\nОставшиеся аргументы команды:", ctx.args) # Попробуйте это с sys.argv cmd_path = click.get_current_context().command_path.split() cli_args = sys.argv[len(cmd_path):] print("Аргументы CLI с sys.argv:", " ".join(cli_args)) если __name__ == "__main__": абв() Получаем ответ:
❯ abc test -o 1 Имя команды: тест Путь команды: abc test Параметры команды: {'option': '1', 'option2': 'two'} Аргументы CLI с помощью Click: ??? Оставшиеся аргументы команды: [] Аргументы CLI с sys.argv: -o 1 Можно ли получить неанализированные аргументы CLI из самого click, т. е. без sys.argv? В приведенном выше примере должно вернуться:
Аргументы CLI с помощью Click: -o 1