Python LIRC阻塞信号解决方法不工作

2024-03-29 15:05:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在使用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阻塞的问题,这就是这个解决方法的目的。我很乐意接受任何一个答案。在

提前谢谢你的帮助,真的很感激。在


Tags: 方法代码texthomesignal队列timeoutpi