печать Python не работает правильно после использования проклятий - PullRequest
1 голос
/ 07 сентября 2010

Я создал простой графический интерфейс с проклятиями.Однако, когда меню проклятий завершено, функция печати ничего не печатает на экране, пока не выйдет основная программа.

В следующем примере, когда запущен calc.py, текст «Список каталогов в порядке» выводится на экран после запуска foo (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 секунд.

1 Ответ

1 голос
/ 14 сентября 2010

Я столкнулся с подобной проблемой. Кажется, что curses что-то делает с буферизацией вывода на stdout. Я думаю, что это увеличение размера буфера вывода или установка буферизованного режима вывода.

Повторное открытие стандартного вывода с нулевым размером буфера может исправить это.

sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

Попробуйте это после того, как проклятия вернутся, но прежде чем что-либо печатать.

...