Вывод команды 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()
Это должно записать выходной буфер в терминал, и вы должны увидеть свой ответ.