python - 在不清除屏幕的情况下读取Linux终端中的特殊键

标签 python python-3.x terminal ncurses python-curses

我有一个程序,我只需要读取 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之后字符等,但我希望该程序能够在所有终端上一致地使用特殊键,例如 F1Home,并且因此,这将是 PITA

有什么办法可以做到这一点

  • 避免使用curses清屏并更改换行模式(我读到ncurses的函数newterm可以用于此目的,但它不是由Python实现的),
  • 在清除屏幕后恢复原始屏幕并手动恢复 CRLF 行为等的任何方法,
  • 还有其他简单的方法可以一致地读取 Linux 中的特殊键吗?

最佳答案

(移自评论)

也许看看https://bitbucket.org/pypy/pyrepl。它是基于诅咒的,但不会清除屏幕。应用程序 pythonipythoni1 提供了一个不使用 readline 的 Python 提示符,但提供了一个类似的界面,并具有一些额外功能,例如多行编辑(如果我们尝试输入多行命令)。

回答您的最新评论:箭头键在 pythonipythoni1 中对我有用...

关于python - 在不清除屏幕的情况下读取Linux终端中的特殊键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26113612/

相关文章:

python - 在 Heroku 中连接 psycopg2 和 Python

macos - 在Zsh的每一行上添加时间戳

Python3 - 如何登录具有隐藏值的网络表单?

python-3.x - 简单的 Python Web 服务器来保存文件

ruby - 在 Ruby 脚本中运行命令行命令

javascript - Express Node.js 不工作

python - MongoEngine 模式 - 名称错误

python - 在 Grumpy 中安装一个 python 包

python - 在 for 循环中使用 if 语句时 python 中的缩进错误

python - 在 Python OpenCV 中访问网络摄像机