1

私は呪いを使って簡単なGUIを作成しました。ただし、cursesメニューが終了すると、印刷機能はメインプログラムが終了するまで画面に何も印刷しません。

以下の例では、calc.pyを実行すると、foo(calcDirs)が実行された後、「Directorylistok」というテキストが画面に出力されます。行をコメントアウトするとfolderSelection.menu(dirs)、テキストは通常​​どおり画面に印刷されます。何か案は?私はPython2.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秒遅れる場合があります。

4

1 に答える 1

1

私は同様の問題に遭遇しました。cursesはstdoutの出力バッファリングに何かをしているようです。出力バッファサイズを増やしたり、バッファ出力モードを設定したりしていると思います。

バッファサイズがゼロのstdoutを再度開くと、修正される場合があります。

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

呪いが戻った後、何かを印刷する前にそれを試してください。

于 2010-09-14T05:00:26.273 に答える