Вывод команды python print задерживается при перерыве в ncurses

У меня есть следующий простой скрипт, который демонстрирует мою проблему:

#! /usr/bin/python

import curses
import time
import os

screen = curses.initscr()                                       
screen.clear()
screen.addstr(0, 0, "Hello World !!!\n", curses.A_REVERSE)      
screen.refresh()                                                
time.sleep(5)
curses.def_prog_mode()                                          #/* Save the tty modes            */
curses.endwin()                                                 #/* End curses mode temporarily   */

os.system("clear")
ans = raw_input("is the sky blue? (y/n):  ")

if ans == 'y':
        print "yes"

time.sleep(5)

curses.reset_prog_mode()                                #/* Return to the previous tty mode stored by def_prog_mode()     */
screen.refresh()                                        #/* Do refresh() to restore the Screen contents           */
screen.addstr(1, 0, "back in ncurses\n", curses.A_REVERSE)              #/* Back to curses use the full    */
screen.refresh()                                                        #/* capabilities of curses        */
time.sleep(5)
curses.endwin()                                                         #/* End curses mode               */

Сценарий выходит из режима проклятий в порядке, выполняет команду очистки в порядке, ожидает ответа от пользователя в порядке, но если ответ "у", вывод "да" не выводится в стандартный вывод до тех пор, пока не будет снова запущен режим ncurses. Вы можете увидеть вывод yes в stdout после завершения скрипта, но не раньше, даже с помощью команды time.sleep(5). Есть ли способ заставить вывод печати отображаться в stdout перед тем, как снова запустится режим ncurses?

1 ответ

Решение

Вам необходимо очистить стандартный вывод.

Пытаться:

import sys
sys.stdout.flush()

Это должно записать выходной буфер в терминал, и вы должны увидеть свой ответ.

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