Я хочу для вывода цветного текста укомплектовать выровнен вправо в терминале (как в этом скриншоте Pacman (packet manager of the arch linux distribution) (не цветной)) выхода цвета, выравнивание по правому краю текст в терминал
В настоящее время я используя format
:
import shutil
left = "foo"
right = "bar"
width = shutil.get_terminal_size().columns
template = "{left:30}{right:{width}}".format(left=left, right=right, width=width-30)
click.echo(template)
# click.echo works just like print with some additional features
Это прекрасно работает, пока я не добавить цвета с помощью кодов ANSI эвакуационных:
left = click.style("foo", fg="red")
right = click.style("bar", fg="green")
# click.style just adds ANSI codes for colors and bold etc.
I.e. правая сторона не полностью выровнена по правому краю. Что является «правильным», потому что right
на самом деле \\x1b[32mbar\\x1b[0m
, который, конечно, имеет более высокую длину, чем bar
, и поэтому для выравнивания по правому краю требуется меньше мест. Пока терминал не получит текст и отобразит только bar
(с цветом).
Я пропустил что-нибудь в python std lib или click? Или есть простая библиотека, которая имеет дело с цветами и выравниванием терминалов, которые могут мне помочь? Или есть простое решение этой проблемы?
AttributeError: объект 'shutil' не имеет атрибута 'get_terminal_size' – xApple
@xApple вы, вероятно, на python2, поскольку версия 3.3 shutil имеет ['get_terminal_size'] (https://docs.python.org/3/library/ shutil.html # shutil.get_terminal_size). – syntonym
Ну, вопрос был помечен только «python», а не «python3». 2-я серия по-прежнему является значением по умолчанию при неопределенной IMO. – xApple