当您调整终端大小时,终端仿真器会向程序发送一个信号 ( SIGWINCH
),使用它进行输入/输出。在您的示例中,这会中断time.sleep()
.
time.sleep()
您可以使用 curses 函数napms()
(等待给定的毫秒数) ,而不是 use 。
从您当前的程序开始,如果您将其打印出来,您可以更好地查看时间行为(改编来自Get current time in milliseconds in Python? 的答案?):
import curses
import time
from datetime import datetime
from datetime import timedelta
start_time = datetime.now()
# returns the elapsed seconds since the start of the program
def elapsed():
dt = datetime.now() - start_time
ms = (dt.days * 24 * 60 * 60 + dt.seconds) * 1000 + dt.microseconds / 1000.0
return ms / 1000.0
myscreen = curses.initscr()
y, x = myscreen.getmaxyx()
i = 0
while y >= 24 and x >= 80 and i <= 23:
myscreen.addstr(i, 0, 'Python curses in action ' + "%.3f" % elapsed())
myscreen.refresh()
y, x = myscreen.getmaxyx()
i += 1
time.sleep(1)
myscreen.getch()
curses.endwin()
curses 具有类似睡眠的功能,但以毫秒为单位: napms
。使用它,您将获得更一致的行为,因为 ncurses 处理SIGWINCH
,根据需要重新启动以napms
获得请求的时间延迟。当我将其更改time.sleep(1)
为
curses.napms(1000)
在调整终端大小时,程序会继续“休眠”一秒钟。