我有一个Python脚本,它侦听箭头向下键和向上键,并通过在一些选项之间移动光标来做出反应。我已经使用pynput
实现了这一点。它在我的机器上运行得很好,但是当我尝试通过SSH在我的Raspberry Pi上运行它时,它不能工作。这是我在终端上看到的:
我已经按了两次向下箭头,因此出现了双^[[B
,并且x
光标应该已经移动到了最后一个方括号。
我看过this issue,它让我觉得pynput不适合我的任务。有什么变通方法吗?
发布于 2021-01-06 20:39:55
pynput
模块监视Linux输入子系统,该子系统用于连接到本地机器的输入设备(键盘、操纵杆、鼠标等)。通过ssh连接接收的击键不会由输入子系统处理,因为它们不是来自输入设备--它们只是通过网络连接传入的数据。
您的代码应该只监视标准输入的击键,而不是依赖于pynput
。无论是在本地运行还是在ssh连接上运行,这都是有效的。
棘手的部分是,正如您在问题中所示,光标移动键(如向下箭头)会生成多字符转义序列。幸运的是,curses
模块将为您处理大部分工作;请看一下this example code
#!/usr/bin/python
import curses
# get the curses screen window
screen = curses.initscr()
# turn off input echoing
curses.noecho()
# respond to keys immediately (don't wait for enter)
curses.cbreak()
# map arrow keys to special values
screen.keypad(True)
try:
while True:
char = screen.getch()
if char == ord('q'):
break
elif char == curses.KEY_RIGHT:
# print doesn't work with curses, use addstr instead
screen.addstr(0, 0, 'right')
elif char == curses.KEY_LEFT:
screen.addstr(0, 0, 'left ')
elif char == curses.KEY_UP:
screen.addstr(0, 0, 'up ')
elif char == curses.KEY_DOWN:
screen.addstr(0, 0, 'down ')
finally:
# shut down cleanly
curses.nocbreak()
screen.keypad(0)
curses.echo()
curses.endwin()
发布于 2021-10-27 14:06:17
如果您的唯一目标是注册按键,sshkeyboard库可能是比curses库更好的选择,因为它使用起来更简单。但是,它不能处理绘制以显示。
安装:
pip install sshkeyboard
对箭头做出反应:
from sshkeyboard import listen_keyboard
def press(key):
if key == "up":
print("up pressed")
elif key == "down":
print("down pressed")
elif key == "left":
print("left pressed")
elif key == "right":
print("right pressed")
listen_keyboard(on_press=press)
https://stackoverflow.com/questions/65594459
复制相似问题