0

我有一个项目需要我用 Python 编写的无限循环。该脚本将遍历一组变量(在脚本开头创建一次)使用每个变量执行一项任务,然后重新开始。这在 99.9% 的情况下都可以正常工作,但每隔一段时间,电子就会卡住并崩溃。这不是问题,是由硬件限制而不是我的脚本引起的。我的 Python 脚本输出的错误如下,如果我在 I2C 总线另一端的 Arduino 忙于做其他事情而无法响应,则会导致错误:

    Traceback (most recent call last):
  File "i2cGet.py", line 105, in <module>
    i2c.i2cWrite(0x54, 1, fanCurrent)
  File "/home/pi/arduino_Interface/i2c.py", line 43, in i2cWrite
    bus.write_byte(address,data)
IOError: [Errno 5] Input/output error

为了解决这个问题,我有一个 bash “启动器”,它会在 python 脚本崩溃时使用until python script.py do. 这也可以正常工作,但是我正在为此过程进行事件日志记录,并且需要一种方法来了解我的 python 脚本在数组中的哪个变量崩溃,以便我可以将其插入日志中。据推测,这将通过 Python 中的自定义事件处理程序来完成,但我很难弄清楚完成这项任务需要做什么。

总结问题:如何在 Python 中创建自定义事件处理程序,然后检索事件以在我的 bash 启动脚本中使用?

请原谅我对事件/事件处理程序的术语。我只是在寻找一种方法,如果发生错误,传递我正在使用的数组中的最后一个元素。在这种情况下,0x54 位于 i2cWrite 函数中,但如果脚本在循环中的其他地方崩溃,它可能并不总是在那里列出。也许更正确的术语是错误处理程序,而不是事件处理程序......

在这一点上,我在 Bash 中这样做的唯一原因是我有一个启动脚本,用于在以前的项目中进行持久性,它运行良好,并且很容易对其进行调整以适应这个项目。如果使用 Python 启动器更容易处理此问题,我可以轻松(我认为)将其移植过来。

谢谢你的帮助!

4

1 回答 1

0
until event=$(python script.py)
do
  ...
done

python 脚本应该将事件打印到标准输出,然后您可以$event在循环体中进行引用。

于 2013-05-30T01:46:51.497 回答