gpt4 book ai didi

python - 在 Shell/终端或变量更改中按键时退出循环

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:46 26 4
gpt4 key购买 nike

所以我在我的 Raspberry pi 上,我想检查传感器是否已被激活。不过,我可能会运行两种不同的东西,一种是从我远程进入的 shell 中运行,另一种是从 LCD 屏幕上运行,其中有几个按钮直接连接到 RPi。我认为最好的方法是运行一个循环来查看用户是否按下某个键(例如回车键或其他键)或者 LCD 界面是否选择继续。我想运行一个循环来检查用户是否按下了某个键,或者变量是否在某处发生了更改,表示 LCD 界面已更改,然后继续执行我的代码,但我不知道最好的方法这。目前,这就是我所拥有的:

import thread
import time
import globals #this is where i keep my project wide global variables. it this this is a good way to do it....

try:
from msvcrt import getch
except ImportError:
def getch():
import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch

char = None

def keypress():
global char
char = getch()

thread.start_new_thread(keypress, ())

globals.LCDVar = 0
while True:
if char is not None:
print "Key pressed is " + char
break
if globals.LCDVar == 1
break
time.sleep(.1)
print "Program is running\n"

<Run whatever code next>

这可行,但我不确定创建的线程会发生什么。我按下一个键后线程还活着吗?如果改变变量而不是按键,线程不会仍然存在吗?如果事件只发生一两次,我会对此感到满意,但这种按键/变量检查可能会发生数百或数千次,而且我不想一遍又一遍地启动新线程。

有更好的方法吗?

感谢您的建议!!

最佳答案

start_new_thread 中调用函数时,您创建的线程退出。返回,因此您无需担心它会永远运行(来自 thread.start_new_thread 的官方文档)。

就执行此操作的“最佳”方法而言,我认为反转在单独线程中运行的内容和在执行主线中运行的内容会很有帮助。也就是说,在单独的线程中工作并在主线程中等待按键。这就是传统上实现此类功能的方式,并且它降低了循环的一些复杂性。

关于python - 在 Shell/终端或变量更改中按键时退出循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21024468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com