Python Print не работает правильно после использования проклятий
-
01-10-2019 - |
Вопрос
Я создал простой графический интерфейс с проклятиями. Однако, когда меню Curses завершается, функция печати не печатает ничего, чтобы экранировать, пока основная программа не выходит.
В приведенном ниже примере, когда Calc.py работает, текстовый список «Список каталогов OK» напечатан на экран после запуска FO (CALCDIRS). Если я прокомментирую линию folderSelection.menu(dirs)
Текст печатается на экран, так как он нормально будет. Есть идеи? Я использую Python 2.5
Calc.py:
import folderSelection
[...]
calcDirs=folderSelection.menu(dirs)
print "Directory list ok"
foo(calcDirs)
Folderselection.py:
import curses
def menu(folders):
global scr
scr = curses.initscr()
curses.noecho() # Do not echo keypresses
curses.cbreak() # No enter required
scr.keypad(1) # Support keypad
curses.curs_set(0) # Do not show the cursor
# Do some calculations
[...]
exitCurses()
return calcDirs
def exitCurses():
global scr
curses.nocbreak()
curses.curs_set(1)
scr.keypad(0)
curses.echo()
curses.endwin()
Редактировать: Похоже, текст обязательно задерживается, пока программа не завершится. Это может быть просто задержано на 30-40 секунд.
Решение
Я столкнулся с подобной проблемой. Кажется, что проклятия делают что-то для выходной буферизации на Stdout. Я думаю, что это увеличивает размер выходного буфера или установочный выходной режим.
Вокруг STDOUT с размером буфера нуля может его исправить.
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
Попробуйте, что после прокрики возвращается, но прежде чем вы напечатаете что-нибудь.