Как стать автором
Обновить

Комментарии 18

скриншоте Manual page от git — супер-популярная, хорошая, и между прочим, очень продуманная программа. Manual page позволяет скроллить вывод вверх-вниз


Нет такой программы «Manual page», а есть программы, которые рендерят файл в формате mdoc: groff и его современная реализация mandoc.

P.S. История развития документации UNIX — manpages.bsd.lv/history.html
автор открыл для себя man git, а скоро догадается набрать man man и его ждёт много интересного :)
Всё это благолепие с разноцветным выводом нравится далеко не всем пользователям, поэтому имеет смысл предусмотреть отключение раскрашивания вывода.

no-color.org
Выглядит одинаково хорошо
Нет. Как минимум акценты (надписи за которые взгляд цепляется в первую очередь) на приведённых скриншотых из-за разных цветовых схем различны.
и к такому выводу нужно стремиться
Нет. Вывод консоли не только для просмотра людьми, часто приходится настраивать утилиты анализа логов, тот же fail2ban, и там вся эта красота может сломать многое.
Вместо:
Hello World!
Будет что-то такое:
\033[0;32mHello\033[0m \033[0;31mWorld!\033[0m
вроде мелочь, а какую-нибудь регулярку, написанную «побыстрому» сломает на раз.
здесь наш специалист по UX создал дизайнерский спиннер — у нас он должен крутиться треугольниками, а не палочками, как у всех остальных. Почему бы и нет? Но на Windows он крутится одинаковыми квадратиками, то есть не работает.
Сами спросили, сами ответили, у всех — потому что так работает, у вас — не работает…
И, опять же, все эти интерактивные красивости в логах потом выглядят так (вырезал, так сказать несколько строк для краткости):
Total 144238 (delta 3), reused 144233 (delta 3)
Checking out files: 7% (12197/157075)
Checking out files: 8% (12566/157075)
Checking out files: 9% (14137/157075)
Checking out files: 10% (15708/157075)
Checking out files: 11% (17279/157075)

Checking out files: 97% (152363/157075)
Checking out files: 98% (153934/157075)
Checking out files: 99% (155505/157075)
Checking out files: 100% (157075/157075)
Checking out files: 100% (157075/157075), done.
потому что для текстового лога нет понятия «передвинуть каретку без перевод строки».
к счастью, сейчас наступила эпоха Windows 10

При этом в коде GetStdHandle и SetConsoleMode и у обеих в разделе поддержки:
Requirements

Minimum supported client Windows 2000 Professional [desktop apps only]
Minimum supported server Windows 2000 Server [desktop apps only]

для параметров
ENABLE_PROCESSED_INPUT и ENABLE_VIRTUAL_TERMINAL_PROCESSING ограничений по версии тоже не установлено. Спрашивается, как связаны Win10 и этот кусок кода, который прекрасно сработате на любой версии начиная от Windows 2000 и старше?
Если вам нужен функционал CreatePseudoConsole, как я предполагаю, то приведённый кусок кода не поможет ни как. Или скриншот не тот приложили к статье?

И ещё полно таких моментов… все описывать — статья не меньше текущей будет.

Если честно, статья какая-то технически… безграмотная что ли.
Нет. Вывод консоли не только для просмотра людьми, часто приходится настраивать утилиты анализа логов, тот же fail2ban, и там вся эта красота может сломать многое.

В статье про это вообще-то написано:


И когда мы, например, перенаправляем вывод через py в grep, чтобы что-нибудь там поискать, или записываем в файл, или запускаем из-под cron, HTTP-сервера или еще чего-нибудь — функция os.isatty() будет возвращать false:

В таких случаях нельзя выводить ни цвет, ни стили, ни размер экрана.
спустя треть статьи, вскользь и не потому, что это создаст мусор в логах, а
Потому что размера экрана нет, а при попытке его спросить вы получите исключение
то есть исключительно из-за «оно ж может упасть».
Вот вывод команды (...) на темном фоне:
И он же со светлой схемой:
Выглядит одинаково хорошо, и к такому выводу нужно стремиться.
Я же не один не могу без чудовищных усилий прочитать этот тёмно-красный на тёмно-сером?
Там еще скриншот в JPEG, а он уродует красный текст.
Вот что действительно нечитаемо — это темно-синий текст на черном фоне.
рандомный скриншот из интернета
image
Например, у всем известного Docker’a вывод — это простыня ровного, скучного и не выделяемого текста. В нем просто трудно ориентироваться

Да в общем-то нормально, как распечатка конфига по уровню читаемости. Можно бы отступ побольше, но это уже придирки.


Один беглый взгляд на экран, и вы сразу можете выделить, что важно, а что — не очень

А как в случае с Docker определить, что важно мне сейчас, а что — не очень? По-моему, там просто и выделять нечего особо — всё и так ясно.


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

Ужасный пример с тем, что автор видит разницы между терминалом и командами, сравнивая вывод «gh pr status» и «docker ps» и считая что это именно докер плохой.

Сделай названия бренчей или коммит мессаджей подлиннее, и они тоже не влезут. И уже будет кто плохой?
Это tty переносит на следующую строку часть информации, а не докер. А при парсинге вывода будет понятно, что это одна строка.
Во-вторых никто не мешает вам выводить docker ps только те столбцы, которые нужны, а не все подряд.
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Command}}"

И gt вот так может?
docker ps -a --format '{{json .}}'

В статье есть несколько интересных инструментов для причесывания внешнего вида, но вот первый же пример меня сразу настроил против автора.
Ужасный пример с тем, что автор видит разницы между терминалом и командами, сравнивая вывод «gh pr status» и «docker ps»

Если честно эту часть вообще не понял. Не могли бы пояснить?

Могу предположить, что основной посыл — нельзя сравнивать «в лоб» вывод абсолютно разных программ, особенно когда этот вывод можно настраивать под свои нужды.
В том, что
1) перенос на вторую строку делает не docker и не gh, а терминал. То есть если в gh в вывод попадет длинная строка (например длинный коммент или длинное имя бренча), то также само будет переноситься на вторую строку. Таким образом это проблема не команды, а конкретного набора данных.

2) вывод docker ps можно настроить как угодно. Любые нужные тебе столбцы. То, что дефолтный вывод выводит чуть больше, чем влазит в 80 строк, не делает хуже, наоборот…

про бесполезность красивостей уже сказали, особо раздражает потом в дженкинсе это цвета читать.


ну а курсор вернуть можно набрав аслепую
reset[enter]

К статье не помешала бы ссылка на репозиторий шаблонного консольного приложения с уже реализованными примерами всего перечисленного и с авто-тестами на всякие нюансы с кодировками и прочим.
Бывают еще кукикаттеры, можно сделать шаблончик для оного из них.

Раскраска — это очень плохой подход.
Намного правильней отмечать строки, например, [I] — info, [W] — warning, [E] — error.
Подобный подход применяется в логах, например, X-сервера.
Зачем?
Потому что можно сделать так:
./dosomething | grep '[E]'
И получить только то что нужно. А попробуй сделать то же самое по цветам. Ага…

тут еще надо различать логи и вывод на консоль. логи обязаны быть грепабительными. вывод в консоль должен быть максимально оптимизирован под пайпы и прочие автлматические вырезания столбцов и строк.
а статья применима только к небольшому классу конечных интерактивных приложений типа top

А ещё есть очень продвинутая библиотека под названием wasabi. Для простоты я использую docopt + wasabi. Click через чур монструозный, все зависит от задачи.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий