2016-08-12 3 views
1

У меня есть сценарий, выход которого отправлен в less, и я хотел бы, чтобы сценарий печатал свои заявления в less, поскольку они приходят, а не все сразу.Последствия стирания stdout после каждой печати

Я обнаружил, что если я запустил stdout (через sys.stdout.flush()) после каждой печати, линия отображается в less при промывке (очевидно).

Мой вопрос: Есть ли недостатки в этом? Мой скрипт содержит сотни тысяч строк, напечатанных, будет промывать после каждой строки вызвать проблемы?

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

+0

Python может сказать, что он автоматически очищает все. Я бы предпочел воспользоваться этим, вместо того, чтобы сделать ваш код длиннее. –

+0

См. Аргумент '-u' интерпретатору Python и переменной окружения' PYTHONUNBUFFERED'; оба документа задокументированы на https://docs.python.org/2/using/cmdline.html –

+0

@CharlesDuffy Спасибо за подсказку, я посмотрю! – Jeeter

ответ

0

В принципе, единственным недостатком является то, что он потенциально медленнее. Буферизация на stdin позволяет вашей программе работать впереди медленного физического ввода-вывода.

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

+1

Если пользователь не использует 'less' в режиме хвоста, инструменту не нужно печатать все до тех пор, пока пользователь не прокрутится вниз, чтобы увидеть его, поэтому, заставляя программу писать« меньше »в небольших кусках, вы уменьшая общую пропускную способность. Может быть, не так много, но я не нашел аргументы, здесь (что использование программы, бобины вывода пользователя означает, что скорость записи, что выход в программу спорно) принуждение; если пользователь просто будет искать этот вывод для ошибок (используя '/' или аналогичные средства), а не читать каждую строку на скорости человека, общая пропускная способность имеет значение. –

+0

Не много, наверное, даже не ощутимо. –

+1

Зависит от деталей, как и во всех вещах. Вероятно, я мог бы построить патологический случай, когда это имело бы значение - если бы вы были намотаны на файловую систему, смонтированную с помощью флага синхронизации, возможно, или если система уже увязла при загрузке прерываний, но при условии, что это сценарии с короткими случаями. –

Смежные вопросы