在编写与终端交互的 Python 程序时,经常需要处理复杂的屏幕控制、键盘输入以及异常处理。curses
库提供了一套工具来管理这些任务,但直接使用 curses
函数可能会比较繁琐,Python 提供了 curses.wrapper()
函数,它可以简化这些操作,使调试更加容易。
什么是 curses.wrapper()
curses.wrapper()
是一个高阶函数,它接收一个函数作为参数,并在安全的 curses
环境中执行该函数。它会自动处理以下任务:
- 初始化
curses
库 - 创建一个标准屏幕对象 (
stdscr
) 并将其传递给你的函数 - 恢复终端的默认设置
- 在程序结束后重置终端,即使发生异常
通过使用 curses.wrapper()
,你可以专注于代码逻辑,而不用担心底层 curses
的设置和清理工作。
如何使用 curses.wrapper()
以下是使用 curses.wrapper()
的步骤:
- 导入
wrapper
函数:
from curses import wrapper
- 定义一个主函数:
该函数接收一个参数stdscr
,它是curses
库创建的标准屏幕对象。你自己的逻辑写在这个函数中。
def main(stdscr):
# 程序逻辑
pass
- 使用
wrapper
函数调用主函数:
wrapper(main)
示例代码
以下示例演示了如何使用 curses.wrapper()
来简化一个简单的终端程序:
from curses import wrapper
def main(stdscr):
# 清空屏幕
stdscr.clear()
# 当 i == 10 时,这将引发 ZeroDivisionError 异常。
for i in range(0, 11):
v = i - 10
stdscr.addstr(i, 0, '10 divided by {} is {}'.format(v, 10/v))
stdscr.refresh() # 刷新屏幕以显示内容
stdscr.getkey() # 等待用户按下任意键
wrapper(main)
curses.wrapper()
会自动处理 curses
的初始化和清理工作,即使在 for
循环中发生 ZeroDivisionError
异常,终端也会被正确地重置。