Python用循环诅咒刷新文本

Python用循环诅咒刷新文本,python,ncurses,python-curses,Python,Ncurses,Python Curses,我正在通过LinuxMint的Xfce终端ssh(也尝试了ssh-t)连接到运行Rasperian Stretch的Raspberry Pi。在Pi上,我有一个Python诅咒的例子,我修改了这个例子,试图让当前时间每隔几秒就更新一次,而不是写自己。但它最初只打印一次时间,然后从不打印更新的时间。但是,如果我在笔记本电脑上手动按“回车”键,时间会更新,如果我快速按“回车”键多次,则“回车”叠加,时间显示的更新次数与我按“回车”键的次数相同。在本例中,关于诅咒、终端或Python,可能有一些基本的

我正在通过LinuxMint的Xfce终端ssh(也尝试了ssh-t)连接到运行Rasperian Stretch的Raspberry Pi。在Pi上,我有一个Python诅咒的例子,我修改了这个例子,试图让当前时间每隔几秒就更新一次,而不是写自己。但它最初只打印一次时间,然后从不打印更新的时间。但是,如果我在笔记本电脑上手动按“回车”键,时间会更新,如果我快速按“回车”键多次,则“回车”叠加,时间显示的更新次数与我按“回车”键的次数相同。在本例中,关于诅咒、终端或Python,可能有一些基本的东西我不理解。谢谢。以下是代码:

import curses
import traceback
import datetime
import time

try:
    # -- Initialize --
    stdscr = curses.initscr()   # initialize curses screen
    curses.noecho()             # turn off auto echoing of keypress on to screen
    curses.cbreak()             # enter break mode where pressing Enter key
                                #  after keystroke is not required for it to register
    stdscr.keypad(1)            # enable special Key values such as curses.KEY_LEFT etc

    # -- Perform an action with Screen --
    stdscr.border(0)
    stdscr.addstr(5, 5, 'Hello from Curses!', curses.A_BOLD)
    stdscr.addstr(6, 5, 'Press q to close this screen', curses.A_NORMAL)

    while True:
        # stay in this loop till the user presses 'q'
        #stdscr.addstr(7, 5, 'zztop',curses.A_NORMAL)
        ti = str((datetime.datetime.now().time()))
        stdscr.addstr(8, 5, 'Time: '+ ti, curses.A_NORMAL)
        time.sleep(3)

        ch = stdscr.getch()
        if ch == ord('q'):
            break



    # -- End of user code --

except:
    traceback.print_exc()     # print trace back log of the error

finally:
    # --- Cleanup on exit ---
    stdscr.keypad(0)
    curses.echo()
    curses.nocbreak()
    curses.endwin()

您需要在睡眠前调用stdscr.refresh(),将输出刷新到屏幕上

您可能还需要将
stdscr.nodelay(1)
添加到程序中的初始化序列中(即
stdscr.keypad(1)
)。这将调用
stdscr.getch()
non-blocking。或者,您可以调用
stdscr.timeout(3000)
,然后完全删除对
sleep
的调用。

stdscr.refresh()和stdscr.nodelay(1)已添加,并按我所希望的方式工作。将阅读有关“非阻塞”stdscr.getch()调用的内容。谢谢你的帮助,你修好了。