Python signal.alarm()处理程序导致pyserial出现问题
所以我有一个运动传感器连接到一个avr micro,它通过usb与我的python应用程序通信。我使用pyserial来做通信。在我的脚本期间,我有一个infinate循环来检查来自avr micro的数据。在这个循环之前,我用signal.alarm启动一个计时器,它将调用一个函数来结束一个子进程。当此警报发出时,它会中断PY串行通信,程序将完全退出。我得到的错误是pyserial读取被中断。有没有办法解决这个问题。任何帮助都是非常棒的问题是,您的警报将中断串行端口的读取,这根本不是您想要的 听起来您可能想将其分为两个线程,分别工作。您使用的是alarm(发送信号)和pyserial(读取和写入串行端口)。当您对这样的设备进行读取或写入时,收到SIGALRM信号,就会中断读取或写入调用,以便处理该信号 由于信号是在用户空间中处理的,而读写实际上是由内核处理的,这使得事情变得相当糟糕。这是信号处理方式的一个众所周知的缺点,可以追溯到UNIX的早期 在python中正确处理信号的代码可能如下所示:Python signal.alarm()处理程序导致pyserial出现问题,python,signals,alarm,pyserial,Python,Signals,Alarm,Pyserial,所以我有一个运动传感器连接到一个avr micro,它通过usb与我的python应用程序通信。我使用pyserial来做通信。在我的脚本期间,我有一个infinate循环来检查来自avr micro的数据。在这个循环之前,我用signal.alarm启动一个计时器,它将调用一个函数来结束一个子进程。当此警报发出时,它会中断PY串行通信,程序将完全退出。我得到的错误是pyserial读取被中断。有没有办法解决这个问题。任何帮助都是非常棒的问题是,您的警报将中断串行端口的读取,这根本不是您想要的
import errno
while True:
try:
data = read_operation()
except OSError, e:
if getattr(e, 'errno', errno.EINTR):
continue
raise
else:
break
不,用信号中断系统调用是正常的;由应用程序或库来重试调用或以其他方式理智地处理调用。在EINTR上完全失败是一个错误。这就是我现在尝试的。我在子进程上有读取功能,现在我遇到了与子进程和父进程通信的问题。这只是因为我缺乏python知识,所以我了解了管道是什么,我的问题就解决了。thanx每个回复的人我都试图实现错误处理,从调试中我看到错误没有被捕获,脚本仍然存在。另外,我对使用论坛非常陌生,我如何像你一样发布我的代码要粘贴我的代码,只需将其粘贴到编辑框中,然后单击1010按钮。它将所有内容缩进4个空格,使其看起来漂亮。