Как правильно выровнять абзац в оболочке, используя Python? - PullRequest
1 голос
/ 17 апреля 2011

Я работаю над интерактивной оболочкой, в которой пользователь вводит какой-то текст, и получаю текст обратно в виде разговора. В последних пользовательских интерфейсах SMS на устройствах Android и Android вы можете видеть текст, выровненный по левому краю для текста, который вы написали, и текст, выровненный по правому краю для текста, который вы получили.

Этого эффекта я хочу добиться, но в оболочке Linux (без красивой графики, только поток входов и выходов).

Мне хорошо известны методы format() и rjust(), но они требуют знать количество символов, которым вы хотите заполнить значение, и я не знаю ширину текущей оболочки.

Я не ограничен библиотекой, которую я могу установить или использовать, и я в основном ориентируюсь на платформу Linux, подумал, что иметь что-то кроссплатформенное всегда приятно.

Ответы [ 3 ]

2 голосов
/ 17 апреля 2011

Как уже отмечалось, используйте проклятия.Для простых случаев, если вы не хотите использовать curses, вы можете использовать COLUMNS переменную окружения ( больше здесь ).

2 голосов
/ 17 апреля 2011

Используйте curses .

Используйте window.getmaxyx() для получения размера терминала.

Другая альтернатива:

import os
rows, cols = os.popen('stty size', 'r').read().split()
0 голосов
/ 30 ноября 2012

Если несколько строк вывода должны быть правильно выровнены, тогда комбинация:

  1. Получение ширины окна: Как получить ширину окна консоли Linux в Python
  2. textwrap.wrap
  3. Использование rjust

Что-то вроде:

import textwrap

screen_width = <width of screen>
txt = <text to right justify>

# Right-justifies a single line
f = lambda x : x.rjust(screen_width)

# wrap returns a list of strings of max length 'screen_width'
# 'map' then applies 'f' to each to right-justify them.
# '\n'.join() then combines them into a single string with newlines.
print '\n'.join(map(f, textwrap.wrap(txt, screen_width)))
...