通过从用户获取输入来打破无限 while 循环

breaking out of an infinite while loop by getting inputs from the user

提问人:tranquilo 提问时间:11/16/2023 最后编辑:Cliffordtranquilo 更新时间:11/16/2023 访问量:70

问:

我正在尝试让无限循环永远运行并持续发送数据。但是当用户按下键盘上的按钮时,它会脱离它。我尝试了下面的代码,但它会发送一次数据,然后询问您的输入等等。有没有办法让键盘的使用输入作为中断,而无需在每次发送数据时都要求用户的输入?

示例代码:

while 1:
    m = input("press 's' to srart\npress 'n' to stop\n")
    
    if m == 's':
        print("Display") 
    elif m == 'n':
        break
Python 嵌入式 固件

评论

0赞 Barmar 11/16/2023
旁白:不使用while True:while 1:
0赞 Barmar 11/16/2023
使用该模块检查按键,无需等待。keyboard
0赞 Lucenaposition 11/16/2023
Control-C呢?
0赞 Clifford 11/16/2023
您已经标记了此 [嵌入式],因此您的硬件,尤其是“键盘”的性质是未知的。你又把它标记为 Python,那么这真的是“嵌入式”的吗?您可能需要描述您的平台。也许你应该标记这个 [embedded-linux] ?
0赞 Edher Carbajal 11/29/2023
我看到您的用户“嵌入式”和“固件”标签。你用的是Linux吗?如果你这样做,你可以直接读取 char 驱动程序

答:

0赞 CDubyuh 11/16/2023 #1

如果您能够使用软件包,则可以导入键盘

pip install keyboard

并执行如下操作:

import keyboard

while True:
    # do something
    if keyboard.is_pressed("n"):
        print("n pressed, ending loop")
        break

然后,您可以添加自己的逻辑,其中“s”将执行您希望它执行的操作。

评论

0赞 John Gordon 11/16/2023
keyboard.is_pressed("n")仅当现在按下该键时为 true,而不是在之前按下时为 true。如果“执行某项操作”代码需要很长时间才能执行,则用户可能在这段时间内按下了该键,但在代码检查该键时,该键不再按下。
0赞 CDubyuh 11/16/2023
有趣的是,我不知道.is_pressed()以这种方式工作。.read_key() 会是更好的实现吗?