2010-09-07 70 views
1

我用curses創建了一個簡單的gui。但是,當curses菜單完成後,打印功能不會將任何內容打印到屏幕上,直到主程序退出。python打印使用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

我遇到了類似的問題。看起來,curses對stdout的輸出緩衝做了一些事情。我認爲這是增加輸出緩衝區大小,或設置緩衝輸出模式。

重新打開緩衝區大小爲零的stdout可能會修復它。

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

嘗試在curses返回之後但打印任何內容之前。

+0

非常感謝!這確實解決了這個問題。 – Pe2 2010-09-14 06:52:40