Image

Image_winnie wrote in Imageru_python

Category:

Отключить буфферизацию в питоне

Хочу что бы процесс питона показывал строки на экране сразу, как только они ему присылаются.

Но он показывает их только в самом конце, как сделать что бы сразу?

Код:

( echo 'asdf'; sleep 3; echo aasdf; ) |
python -u -c $'import sys;\nfor s in sys.stdin: (sys.stdout.write(s), sys.stdout.flush())'

Первый процесс генерирует две строки с промежутком 3 секунды, второй - это питон с флагом -u и sys.stdout.flush, как ему ещё сказать что бы он не буферизовал?

Проверял под виндовым python Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on win32 и под линуксом Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40) [GCC 4.4.5] on linux2

Если заменить python на cat, то строки появляются сразу как только первый процесс напечатал их, постепенно.

updated:
Спасибо Imagephd! Оказывается, если вместо for s in sys.stdin использовать while 1: sys.stdin.readline(), то реакция на ввод мгновенная.