使用curses后python print无法正常运行

时间:2010-09-07 08:41:42

标签: python curses python-2.5

我用curses创建了一个简单的gui。但是,当curses菜单完成时,打印功能在主程序退出之前不会打印任何内容。

在下面的示例中,运行calc.py时,运行foo(calcDirs)后,文本“Directory list ok”将打印到屏幕上。如果我注释掉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 个答案:

答案 0 :(得分:1)

我遇到了类似的问题。似乎curses对stdout上的输出缓冲做了些什么。我认为它增加了输出缓冲区大小,或者设置了缓冲输出模式。

重新打开缓冲区大小为零的stdout可能会修复它。

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

在curses返回之后但在打印之前尝试一下。