我有一个简单的 python 脚本,它有一些循环运行的函数(我正在读取传感器读数)。
while True:
print "Doing a function"
如果按下键盘,我想打印“按下键”。
在 Python 中执行此操作的最简单方法是什么?我搜索过高低。我已经找到了如何使用 pygame 来完成它,但我宁愿不用它。如果我必须使用 pygame,是否可以没有单独的应用程序窗口?:
import pygame, time
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('Pygame Keyboard Test')
pygame.mouse.set_visible(0)
while True:
print "doing a function"
for event in pygame.event.get():
if (event.type == KEYUP) or (event.type == KEYDOWN):
print "key pressed"
time.sleep(0.1)
原文由 Tom R 发布,翻译遵循 CC BY-SA 4.0 许可协议
编辑:
我已经考虑了很多这个问题,并且可能需要一些不同的行为。我一直在为 Unix 和 Windows 实现其中的大部分,并会在完成后将它们张贴在这里。
同步/阻塞键捕获:
input
或raw_input
一个阻塞函数,一旦用户按下换行符,它就会返回用户输入的文本。异步密钥捕获:
轮询:
用户只是想在按下某个键时能够做一些事情,而不必等待该键(所以这应该是非阻塞的)。因此,他们调用 poll() 函数,该函数要么返回一个键,要么返回 None。这可以是有损的(如果它们在轮询之间花费的时间太长,它们可能会错过一个键)或无损的(轮询器将存储所有按下的键的历史记录,因此当 poll() 函数请求它们时,它们将始终被返回按顺序排列)。
与 1 相同,不同之处在于 poll 仅在用户按下换行符后才返回内容。
机器人:
这些是可以调用以编程方式触发键盘事件的东西。这可以与键捕获一起使用以将它们回显给用户
实现
同步/阻塞键捕获:
一个简单的
input
或raw_input
一个阻塞函数,一旦用户按下换行符,它就会返回用户输入的文本。一个简单的阻塞函数,等待用户按下一个键,然后返回那个键
异步密钥捕获:
每当用户在命令提示符中键入一个键时,使用按下的键调用的回调,即使是在解释器(键盘记录器)中键入内容时也是如此
在用户按下 enter 后使用键入的文本调用的回调(不太实时的键盘记录器)
视窗:
这使用下面给出的 windows Robot,将脚本命名为 keyPress.py
在程序运行时(例如,在 for 循环或 while 循环中)按下按键时调用的回调
视窗:
轮询:
用户只是想在按下某个键时能够做一些事情,而不必等待该键(所以这应该是非阻塞的)。因此,他们调用 poll() 函数,该函数要么返回一个键,要么返回 None。这可以是有损的(如果它们在轮询之间花费的时间太长,它们可能会错过一个键)或无损的(轮询器将存储所有按下的键的历史记录,因此当 poll() 函数请求它们时,它们将始终被返回按顺序排列)。
Windows 和 OS X(也许还有 Linux):
简单用例:
与上面相同,只是 poll 仅在用户按下换行符时返回一些内容。
机器人:
这些是可以调用以编程方式触发键盘事件的东西。这可以与键捕获一起使用以将它们回显给用户
视窗:
操作系统: