Pull to refresh

Comments 14

Прикольные инструменты, не знал про них. Спасибо за статью.

Часть 2 про Rich задублировалась, исправьте пожалуйста.

Так и не понял, чем это лучше argparse. Та же простыня настроек, только не там, где ты хочешь, а обязательно в main. А argparse тоже умеет валидацию типов и кастомные ограничения.

А у меня есть немного другой запрос - давно уже хочется превратить консоль в аналог терминала GDB: пользователь вводит команды, мы их валидируем и парсим, исполняем, возможно, меняем внутреннее состояние. Желательно, чтобы было какое-то автодополнение, к тому же. С ходу ничего не нашёл, руками заифал сплиты input() в цикле... Может, кто-нибудь сталкивался с такой штукой?

А вы стандартный модуль cmd видели? Ну и к нему ещё можно questionary добавить, если жив ещё.

Статья хорошая! Однозначно в закладки. Жду решения той же задачи для GUI...просим!!!

Ставишь PySide6 и вперед. Типовые решения можно у чат бота запросить, неплохо claude c таким справляется. Чтобы не возиться с настройками, можно мой фреймворк PUSSY использовать

превращая скучный текстовый поток в информативный и приятный для глаз интерфейс.

Unpopular opinion, но я здесь вижу "превращая универсальный и работающий везде текст в раздутое и постоянно ломающееся месиво из юникода". Регулярно у меня ломаются и цвета, и эмодзи, и особенно рамочки в самых разных местах: в контейнерах, в термуксе, во встроенном терминале IDE. Красота — это, конечно, хорошо, но максимум, что можно сделать — подкрасить особенно важные места вывода и добавить что-то вроде галочек и крестиков (только там, где оно несёт реальную смысловую нагрузку и предварительно протестировав на разных терминалах). И нужно помнить ещё и о том, что в куче мест может не быть цветов, поэтому не нужно на них одних вешать ответственность за передачу смысловой нагрузки (иной раз прогрессбары делают одинаковыми символами разных цветов, а потом сидишь в одноцветном терминале и думаешь, чего ж оно не грузится). Ну а таблички уже полвека замечательно рисуются символами табуляции.

еще есть click, тоже вполне удобная обработка аргументов

import click


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


if __name__ == "__main__":
    hello()

или если надо не просто агрументы а команды с аргументами, тогда вот так

import click


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


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


@cli.command()
@click.option("--name", prompt="Your name", help="The person to greet.")
def bye(name):
    """A command that says goodbye to NAME."""
    click.echo(f"Goodbye {name}!")


if __name__ == "__main__":
    cli()

вызов без аргументов выдает короткую справку

Usage: click_demo.py [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  bye    A command that says goodbye to NAME.
  hello  A command that greets NAME for a total of COUNT times.

вызов помощи для команды, показывает описание команды

$click_demo.py hello --help

Usage: click_demo.py hello [OPTIONS]

  A command that greets NAME for a total of COUNT times.

Options:
  --name TEXT      The person to greet.
  --count INTEGER  Number of greetings.
  --help           Show this message and exit.

А поверх click'а можно воткнуть Trogon и одним декоратором сконвертировать CLI-приложение в удобный TUI (текстовый GUI), с дропдаунами, валидаторами и т.п., который к тому же обратно совместим с консольным вызовом, т.е. можно вызывать в "консольном" виде, или в виде интерактивного интерфейса.

Тайпер и есть обёртка над кликом. Ничего нового не несёт, кроме способа описывать аргументы.

К Сlick претензий нет, пользуюсь, удобно. Есть группы, вложенная структура команд, опции, флаги, аргументы и т.п. + расширения вида click_log и указанного ниже Trogon и м.б. что еще.

С самых первых строк нам рассказывают про боль использования CLI приложений. Чтобы такую боль не испытывать пару лет назад сделал фреймворк и менеджер утилит на базе PySide6 (в профиле есть статьи об этом). В Qt много стандартных виджетов для отображения информации, есть программа для дизайна окон, так что можно собрать утилиту почти с той же скоростью, что и без gui

Sign up to leave a comment.

Articles