我有一个程序,我只需要读取 Linux 终端(xterm 和控制台)中的特殊键。目前我正在使用 curses
来做到这一点(尽管我绝对不需要诅咒来完成其他任何事情),并且它工作得很好,除了一个麻烦:我不希望诅咒清除屏幕并更改 CRLF 模式。
也就是说,这段代码可以做到这一点:
stdscr = curses.initscr()
curses.cbreak()
curses.noecho()
stdscr.keypad(1)
while True:
c = stdscr.getch()
if c == curses.KEY_UP:
scroll_up()
elif c == curses.KEY_DOWN:
scroll_down()
但复杂的是,它会清除屏幕,并且看不到终端上以前的内容;此外,后台进程的所有输出都将换行符转换为仅换行符。
我知道我可以自己将终端设置为生模式,延迟到ESC
之后字符等,但我希望该程序能够在所有终端上一致地使用特殊键,例如 F1、Home 和 ↑,并且因此,这将是 PITA
有什么办法可以做到这一点
- 避免使用curses清屏并更改换行模式(我读到ncurses的函数
newterm
可以用于此目的,但它不是由Python实现的),或 - 在清除屏幕后恢复原始屏幕并手动恢复 CRLF 行为等的任何方法,或
- 还有其他简单的方法可以一致地读取 Linux 中的特殊键吗?
最佳答案
(移自评论)
也许看看https://bitbucket.org/pypy/pyrepl
。它是基于诅咒的,但不会清除屏幕。应用程序 pythoni
和 pythoni1
提供了一个不使用 readline
的 Python 提示符,但提供了一个类似的界面,并具有一些额外功能,例如多行编辑(如果我们尝试输入多行命令)。
回答您的最新评论:箭头键在 pythoni
和 pythoni1
中对我有用...
关于python - 在不清除屏幕的情况下读取Linux终端中的特殊键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26113612/