python - python中getch的箭头键
问题描述
我想在 python linux 中捕获箭头键:
import getch as gh
ch = ''
while ch != 'q':
print(ch)
ch = gh.getch()
k = ord(ch)
print(k)
# my question is:
if k or ch = ???
print("up")
当我运行上面的代码并按箭头键时,我得到以下字符,它们是什么以及如何匹配一个?
27
1
[
66
B
27
1
[
67
C
27
1
[
65
A
解决方案
它们是ANSI 转义序列。
当我们在终端中执行以下代码时:
import getch as gh
ch = ''
while ch != 'q':
ch = gh.getch()
print(ord(ch))
当我们向上箭头时,它会打印以下内容↑</kbd> key once:
27
91
65
参考ASCII表,我们可以看到它对应ESC[A
。它是ANSI 转义序列中“ Cursor UP ”的代码。(CSI的顺序是ESC [
,所以ESC[A
== CSI A
==CSI 1 A
表示“将光标向上移动一个单元格。”)
同样,我们也可以找出其他方向键。
如果您想使用getch 模块匹配箭头键,您可以尝试以下代码(get_key
下面的函数最初来自此答案):
import getch as gh
# The function below is originally from: https://stackoverflow.com/a/47378376/8581025
def get_key():
first_char = gh.getch()
if first_char == '\x1b':
return {'[A': 'up', '[B': 'down', '[C': 'right', '[D': 'left'}[gh.getch() + gh.getch()]
else:
return first_char
key = ''
while key != 'q':
key = get_key()
print(key)
当我们按下时会打印以下内容↑</kbd> ↓</kbd> ←</kbd> →</kbd> q
up
down
left
right
q
推荐阅读
- nginx - Nginx 重写:如何在文件扩展后删除所有内容
- c# - C#将数组的每一行乘以一组因子
- javascript - jQuery 在单击事件上触发对 URL 的调用
- javascript - svg上的点击事件拒绝播放
- rust - 使用 Serde 反序列化时如何将特殊值转换为 Option::None?
- android - 模拟器:queryCoreProfileSupport:未找到交换间隔
- javascript - 如何在 javascript 中使用正则表达式替换 cookie 字符串中的 cookie 值
- python - 识别字符串是否仅具有特定文本
- python - 在 scipy.optimise 中正常吗?
- mysql - 需要帮助来调整复杂的查询