Стиль вывода на консоль, рекомендации по форматированию

Как вы предпочитаете форматировать вывод своих консольных скриптов? Я имею в виду вывод, произведенный во время запуска приложения (log, stdout).

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

************ Starting programm X ************
Fetching 450 lands... Done
540 local lands found
syncronizing [--------                ] 10%
Done

Вывод с заглавной буквы или все буквы в нижнем регистре? Отступ применяется к выводу или нет? Как насчет визуального сахара, такого как тире или хэш? Прогресс-бары как в wget?

Я понимаю, что это своего рода дизайн, но в Web у нас есть несколько основных правил, у нас есть удобство использования, и у нас нет правил в выводе на консоль. Что Джейкоб Нильсен говорит о выводе консольных скриптов?

1 ответ

Удобство использования очень важно даже в консольных скриптах. В частности, при любом длительном процессе, независимо от того, является ли пользовательский интерфейс графическим или в терминале, лучше использовать некоторые индикаторы хода выполнения задачи. Я бы порекомендовал взглянуть на эвристику Нильсена, многие из принципов непосредственно применимы к выводу консоли. Есть три эвристики, в частности, когда речь идет о выводе консоли, на которые может быть полезно взглянуть:

  1. Видимость состояния системы: отображение прогресса в консоли с помощью какого-либо индикатора выполнения, чтобы показать, что происходит в течение разумного времени.
  2. Последовательность и стандарты: Вы затронули этот вопрос в своих черточках или хэшах.
  3. Эстетичный и минималистичный дизайн: попробуйте вывести минимальное количество информации, которая является актуальной и полезной.

Для стандартов и согласованности следуйте соглашениям существующих популярных команд. Два хороших, чтобы проверить это Wget и PV. У них обоих очень похожи прогрессбары:

Wget

44% [================>                      ] 441,017,992  111MB/s  eta 6s

ру

 138MB 0:00:01 [ 107MB/s] [=========================================>] 100%  

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

С точки зрения обновления в разумные сроки. Я склонен обновлять статус в консоли каждые 0,1 секунды. Чтобы интерфейс чувствовал себя отзывчивым, вам нужно что-то в этом диапазоне. Wget обновляется каждые 0,2 секунды. Но по умолчанию для команды watch стоит 2 s, что кажется слишком вялым. Обычно я запускаю эту команду как watch -n 0.1 command иметь интервал обновления 0,1 с.

В одном из комментариев указывалось, что ваш вывод должен быть анализируемым и конвейерным. Это очень хорошая вещь, чтобы иметь, если это возможно. Мне особенно нравится, как wget подходит к этому вопросу. Если вы запускаете wget в терминале, он использует индикатор хода выполнения панели, но если вы передаете по каналу файл или другую программу, он использует индикатор хода выполнения точки. Он определяет, есть ли у вас tty или автоматически отправляет команду, и выбирает наиболее подходящий формат. Вы можете прочитать об этом на его странице man в документации аргумента --progress. По сути, он имеет один вывод, который более удобочитаем, а другой - более машиночитаемый и удобный для журналов.

Некоторые связанные / полезные ссылки:

Другие вопросы по тегам