Читать книгу Мастерство терминальных интерфейсов Python: TUI от основ к профессионализму - - Страница 6

Глава 6. Реагирование на команды пользователя в консольных приложениях

Оглавление

Консольные приложения в Python требуют эффективных способов взаимодействия с пользователем. Работа с командами включает обработку аргументов при запуске, создание интерактивных консолей с автодополнением и историей, а также интерпретацию сложных инструкций. Рассмотрим ключевые подходы и инструменты.


## Обработка аргументов командной строки

### Использование `sys.argv`

Для простейших сценариев подходит модуль `sys`:

```python

import sys

if len(sys.argv) > 1:

command = sys.argv[1]

if command == "start":

print("Запуск процесса…")

elif command == "stop":

print("Остановка процесса…")

else:

print("Не указана команда. Допустимые команды: start, stop")

```


### Продвинутая обработка с `argparse`

Для сложных сценариев используйте `argparse`:

```python

import argparse

parser = argparse.ArgumentParser(description="Управление службой")

parser.add_argument("command", choices=["start", "stop", "status"], help="Команда управления")

parser.add_argument("–force", action="store_true", help="Принудительное выполнение")

args = parser.parse_args()

if args.command == "start":

print(f"Служба запущена{' (принудительно)' if args.force else ''}")

elif args.command == "stop":

print(f"Служба остановлена{' (принудительно)' if args.force else ''}")

```


## Интерактивные консольные интерфейсы

### Простой цикл с `input()`

Базовый вариант для построчного ввода:

```python

while True:

user_input = input("> ").strip().lower()

if user_input in ("exit", "quit"):

break

elif user_input == "help":

print("Доступные команды: help, calc, exit")

elif user_input.startswith("calc"):

try:

expr = user_input.split(" ", 1)[1]

result = eval(expr)

print(f"Результат: {result}")

except Exception as e:

print(f"Ошибка: {e}")

```


### Использование `cmd` для структурного проектирования

Модуль `cmd` создает гибкие консольные интерфейсы:

```python

import cmd

class MathConsole(cmd.Cmd):

prompt = "math> "

def do_add(self, arg):

nums = [float(x) for x in arg.split()]

print(f"Сумма: {sum(nums)}")

def do_exit(self, arg):

print("Выход из программы")

return True

if __name__ == "__main__":

MathConsole().cmdloop()

```


## Продвинутые пользовательские интерфейсы с `prompt_toolkit`

Библиотека `prompt_toolkit` предлагает расширенные возможности: автодополнение, подсветку синтаксиса, мультилайн ввод.

Мастерство терминальных интерфейсов Python: TUI от основ к профессионализму

Подняться наверх