python - 使用curses立即检测用户输入

标签 python python-2.7 curses

我在python2.7中使用curses来控制机器人。我想用例如来引导它w 键,告诉它应该继续前进。这是我的代码,去掉了所有机器人控件:

import curses
from time import sleep

if __name__ == "__main__":
    shell = curses.initscr()
    shell.nodelay(True)

    while True:
        key = shell.getch()

        if key == 119:
            print("key w pressed")

        sleep(0.03)

效果很好,只是我必须按 Enter 键才能识别该键。因此,我可以多次按 w,当我按 Enter 时,机器人会完全执行其应该执行的操作,或者在本示例中,文本 key w Pressed 显示为我已经按了很多次了。但我希望这立即发生,即无需按 Enter 键。如何实现这一目标?

最佳答案

curses.cbreak() 添加到您的设置中,并在清理时调用 curses.nocbreak() 将终端恢复到可用状态。

您可以通过捕获 ctrl-c 作为异常来进行清理。例如:

 try:
     curses.cbreak()
     while True:
            key = shell.getch()
            if key == 119:
                print("key w pressed")
            sleep(0.03)
 except KeyboardInterrupt:
     curses.nocbreak()

关于python - 使用curses立即检测用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32136907/

相关文章:

python - Qt - 加载扩展名错误的图像

python - 使用 Python3/mysqlclient 检索以 latin1 编码的数据时的字符编码问题

python-无法使用 Homebrew 安装的模块?

python - 使用 Python 在 JIRA 中使用受让人、观察者和附件创建新问题

c - 如何使用 lncurses 检测太空入侵者控制台游戏中的子弹击中

python - 将真实颜色列表与另一个颜色列表进行比较

python - 基于多个条件的重复数据删除 python 列表

python - 为什么 curses 模块没有通过 pip 安装?

python - 使用 python curses 逐页滚动或逐行滚动

python - 如何在 django 序列化器中包含自定义函数?