Отключить буфферизацию в питоне
Хочу что бы процесс питона показывал строки на экране сразу, как только они ему присылаются.
Но он показывает их только в самом конце, как сделать что бы сразу?
Код:
( 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:
Спасибо
phd! Оказывается, если вместо for s in sys.stdin использовать while 1: sys.stdin.readline(), то реакция на ввод мгновенная.
Но он показывает их только в самом конце, как сделать что бы сразу?
Код:
( 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:
Спасибо
