ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Вставка переносов строки в текст справки argparse Python

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для того чтобы добавить символы разрыва строки (\n) в текст помощи вашего парсера argparse.ArgumentParser, используйте класс RawTextHelpFormatter:

Python
Скопировать код
import argparse

# Создаем парсер с использованием RawTextHelpFormatter
parser = argparse.ArgumentParser(description="О методе добавления новых строк", formatter_class=argparse.RawTextHelpFormatter)

# Определяем аргумент, в описании которого присутствуют символы разрыва строки
parser.add_argument('--option', type=int, help='Приветствую вас в первой строке\nВстречаемся со второй строкой\nПрошу любить и жаловать: третья строка')
args = parser.parse_args()

Чтобы увидеть результат вставки новых строк, запустите скрипт с ключом --help.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Пользовательский форматтер для выборчного форматирования

Если вам нужно ограничить использование символов разрыва строк, вы можете воспользоваться SmartFormatter. Это пользовательский форматтер, который позволяет управлять форматированием:

Python
Скопировать код
import argparse

class SmartFormatter(argparse.HelpFormatter):
    def _split_lines(self, text, width):
        # Разрешаем символы разрыва строки только там, где строка начинается с 'R|'
        if text.startswith('R|'):
            return text[2:].splitlines()
        # Во всех остальных случаях обрабатываем текст стандартным образом
        return super()._split_lines(text, width)

parser = argparse.ArgumentParser(description='Описание приветствуется', formatter_class=SmartFormatter)
parser.add_argument('--option', help='R|В начале была первая строка\nЗа ней последовала вторая\nОстальные строки остаются без изменений')
args = parser.parse_args()

На Bitbucket вы можете найти более продвинутую версию SmartFormatter с дополнительными функциями, включая возможность вставки значений по умолчанию.

Табличный и читаемый формат

Если вы хотите отформатировать текст, сохраняя табуляцию и строки с переносами, используйте textwrap.dedent. Это позволит устранить висячие отступы и сделать текст более читаемым:

Python
Скопировать код
import argparse
import textwrap

class MultilineFormatter(argparse.HelpFormatter):
    def _fill_text(self, text, width, indent):
        # Обрубаем левые отступы и удаляем начальные/завершающие пробелы
        text = textwrap.dedent(text).strip()
        # Собираем текст, сохраняя новые строки
        return ''.join(indent + line for line in textwrap.wrap(text, width))

parser = argparse.ArgumentParser(description='Многострочное описание', formatter_class=MultilineFormatter)
parser.add_argument('--list', type=str, help=textwrap.indent(textwrap.dedent("""\
    – Первый элемент списка
    – Второй элемент списка
    – И так далее...
"""), "  "))
args = parser.parse_args()

Такой подход позволит сделать каждую строку отдельным и читаемым блоком.

Визуализация

Представьте себе, что вы создаете подробную инструкцию:

Markdown
Скопировать код
📘 Инструкция:
- Завести двигатель [Нажать кнопку 'Старт']
- Использовать навигатор [Ввести место назначения]

Если вы не добавляете разрывы строк, вся информация склеивается в единый блок текста:

Markdown
Скопировать код
🧱📄: Завести двигатель, нажав кнопку 'Старт', ввести адрес в навигатор...

Вставляя новые строки, вы упорядочиваете информацию по отдельным блокам, аналогично расставленному товару на полках магазина:

Markdown
Скопировать код
🔲 Запуск двигателя   🔳 Использование навигации
├─ Нажать кнопку 'Старт'    ├─ Ввести место назначения
└─ (Всё остается на своих местах)  └─ (Информация четко разделена)

От вас зависит, на что будет походить ваш текст: на инструкцию от IKEA или на хорошо структурированный код.

Управляйте своим текстом

Если вам нужно сохранить исходное форматирование текста, примените следующий однострочный пользовательский форматтер:

Python
Скопировать код
import argparse

class PreserveNewlineFormatter(argparse.HelpFormatter):
    def _split_lines(self, text, width):
        # сохраняем разрывы строки для каждой строки
        return text.splitlines()

parser = argparse.ArgumentParser(description="Сохраняем переносы строк", formatter_class=PreserveNewlineFormatter)
parser.add_argument('--manual', help='Строка No1\nСтрока No2\nДа, всё так аккуратно и четко!')
args = parser.parse_args()

Такой подход позволяет сохранить первоначальное формирование всех строк.

Тонкости и потенциальные проблемы

Создание собственных форматтеров может решить сложные задачи, например, форматирование многострочных блоков кода или цитат. Однако будьте осторожны с длинными строками: из-за ограничения ширины терминала текст справки может стать нечитабельным. Тестируйте свой скрипт на различных размерах экрана, чтобы избежать непрофессионального вида!

Полезные материалы

  1. Аргументы командной строки в Python с помощью argparse – Real Python — Подробное руководство по работе с командной строкой в Python.
  2. Учебник по argparse — документация по Python 3.12.2 — Официальный учебник, помогающий освоить базовые возможности argparse.
  3. argparse — Parser for command-line options, arguments and sub-commands — Python 3.12.2 Documentation — Более подробное изучение всех тонкостей argparse, включая настройку текста справки.
  4. Как вставить новые строки в текст справки argparse? – Stack Overflow — Обсуждение о способах вставки символов разрыва строки в текст справки.
  5. Python Учебник – Argparse – YouTube — Видеоурок, помогающий новичкам быстро освоить основы argparse.
  6. Некоторые тонкости использования argparse · GitHub — Примеры форматирования текста справки при использовании argparse на Github.