cat блокирует буферизацию по умолчанию, если вывод на канал.Поэтому, когда вы включаете - (stdin) в команду cat, она ожидает получения EOF (ваш ctrl-D закрывает поток stdin) или 8K (возможно) данных перед выводом чего-либо.
Если вы измените catкоманда "cat script.py |"вы увидите, что все работает так, как вы ожидали.
Кроме того, если вы добавите 8K комментариев в конец файла script.py, он сразу же напечатает его.
Редактировать:
Вышесказанное неверно.: -)
Оказывается, что file.next () (используется файловыми итераторами, т. Е. Для строки в файле) имеет скрытый буфер опережающего чтения, который не используется readline (), который просто читаетсимвол, пока он не увидит новую строку или EOF.