Взаимодействие с пользователем – ключевой аспект терминальных приложений. Python предоставляет простые, но мощные инструменты для ввода и вывода текстовой информации. Начнём с базовых механизмов работы с текстом.
**Вывод данных: функция `print()`**
Функция `print()` – основной способ отображения информации. Она преобразует переданные объекты в строки и выводит их в консоль. Пример:
```python
print("Добро пожаловать в приложение!")
```
Вы можете передавать несколько аргументов, разделяемых запятыми. По умолчанию `print()` объединяет их через пробел и добавляет символ переноса строки `\n`. Чтобы изменить разделитель или завершение строки, используйте параметры `sep` и `end`:
```python
print("Файл", "загружен", "успешно", sep="::", end="!\n")
# Результат: "Файл::загружен::успешно!"
```
**Форматирование строк**
Для создания сложных выводов применяйте форматирование:
1. **f-строки** (рекомендуется):
```python
name = "Алиса"
balance = 1200.75
print(f"Пользователь: {name}. Баланс: {balance:.2f} ₽")
# Вывод: "Пользователь: Алиса. Баланс: 1200.75 ₽"
```
2. **Метод `str.format()`**:
```python
print("Сумма: {} из {}".format(5, 10)) # Сумма: 5 из 10
```
3. **Шаблоны % (устаревший способ)**:
```python
print("Отчёт за %s. Ошибок: %d" % ("2024", 0))
```
**Ввод данных: функция `input()`**
Для получения данных от пользователя используйте `input()`. Функция приостанавливает выполнение программы, ожидает ввода с клавиатуры (до нажатия Enter) и возвращает строку:
```python
name = input("Введите ваше имя: ")
print(f"Здравствуйте, {name}!")
```
**Важно:** `input()` всегда возвращает строку. Для преобразования в числа используйте `int()` или `float()`:
```python
try:
age = int(input("Ваш возраст: "))
except ValueError:
print("Ошибка: введите целое число!")
```
**Расширенные возможности вывода**
Для сложных интерфейсов используйте библиотеки, но некоторые эффекты доступны без них:
1. **Многострочный текст**: Тройные кавычки сохраняют переносы:
```python
print("""Первая строка
Вторая строка""")
```
2. **Управление курсором** (ANSI-коды):
```python
print("\033[2J") # Очистка экрана (поддерживается не всеми терминалами)
```
3. **Цветной текст** (через ANSI-коды):
```python
print("\033[31mКрасный текст\033[0m") # \033[0m сбрасывает стиль
```
**Обработка ошибок ввода**
Всегда проверяйте пользовательский ввод на корректность:
```python
while True:
try:
value = float(input("Введите число: "))
break
except ValueError:
print("Ошибка! Введите числовое значение.")
```
**Практические советы**
– Используйте f-строки для читаемости и производительности.
– При запросе конфиденциальных данных (пароли) применяйте модуль `getpass`.
– Для длинных текстов выводите содержимое по частям или с пагинацией.
Эти фундаментальные техники обеспечивают базовое взаимодействие с пользователем. В следующих главах мы расширим их, добавив интерфейсы на базе библиотек, таких как `curses` или `rich`.
Консольные приложения в 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` предлагает расширенные возможности: автодополнение, подсветку синтаксиса, мультилайн ввод.
О проекте
О подписке
Другие проекты