我一直在使用Python LIRC的LIRC函数下一个代码()。我关闭了阻塞,这允许代码下一个代码()如果LIRC队列为空,则通过使用初始初始值(“program”,blocking=False)并尝试lirc.set U阻塞(False,sockid)。两者都不起作用,代码总是挂起,等待按钮按下,当它应该继续。在
我找到了一个解决方法,它对原始输入('prompt')设置了时间限制。所以即使我的下一个地址()等待按钮按下,如果没有按下任何按钮来解除警报,则警报将在5秒后关闭,并跳过代码:
import signal
class AlarmException(Exception):
pass
def alarmHandler(signum, frame):
raise AlarmException
def nonBlockingRawInput(prompt='', timeout=20):
signal.signal(signal.SIGALRM, alarmHandler)
signal.alarm(timeout)
try:
text = raw_input(prompt)
signal.alarm(0)
return text
except AlarmException:
print '\nPrompt timeout. Continuing...'
signal.signal(signal.SIGALRM, signal.SIG_IGN)
return ''
然后根据我的需要修改了它:
^{pr2}$我希望发生的事情:如果一个按钮被按下,并且一个IR代码在LIRC队列中,它应该打印被按下的按钮。如果没有按下按钮,并且LIRC队列为空,则应打印“提示超时”。继续…“和“超时”。在
实际发生的情况:如果一个按钮被按下,并且IR代码在LIRC队列中,它会打印按钮,但是如果没有按钮被按下,队列是空的,它会挂起,直到我关闭它。
在我将text=raw\u input(prompt)更改为text=下一个代码(),然后它挂起该函数,直到它关闭并给出以下错误:
Traceback (most recent call last):
File "/home/pi/time.py", line 27, in <module>
nonBlockingRawInput()
File "/home/pi/time.py", line 16, in nonBlockingRawInput
text = lirc.nextcode()
File "/home/pi/time.py", line 10, in alarmHandler
raise AlarmException
__main__.AlarmException
因此,不仅要为下一个代码()不工作,但它也阻止信号报警代码的解决方法继续。在
这里有一个链接“Python Lirc blocks code even when blocking is off”到我最初关于LIRC阻塞的问题,这就是这个解决方法的目的。我很乐意接受任何一个答案。在
提前谢谢你的帮助,真的很感激。在
切换到Pyrirc2并使用电缆塔堵塞(0)已修复。在
相关问题 更多 >
编程相关推荐