我有一个项目,需要我用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“starter”,它将在使用until python script.py do
崩溃时重启python脚本。这也很好,但是我正在处理我的事件日志记录这个过程,需要一种方法来知道我的python脚本崩溃的数组中的哪个变量,所以我可以将它插入到日志中。据推测,这可以通过Python中的自定义事件处理程序完成,但我很难弄清楚完成此任务需要做些什么。
总结中的问题:如何在Python中创建自定义事件处理程序,然后检索事件以在我的bash启动程序脚本中使用?
请原谅我的事件/事件处理程序术语。我只是在寻找一种方法,在发生错误的情况下,传递我正在使用的数组中的最后一个元素。在这种情况下,i2cWrite函数中的0x54,但如果脚本在循环中的其他位置崩溃,则可能并不总是列在那里。也许更正确的术语是错误处理程序,而不是事件处理程序......
此时,我在Bash中执行此操作的唯一原因是我有一个启动脚本,我用于以前项目中的持久性运行良好,并且很容易使其适应此项目。如果用Python启动器更容易处理这个问题,我可以很容易地(我认为)移植它。
感谢您的帮助!
答案 0 :(得分:0)
until event=$(python script.py)
do
...
done
python脚本应该将事件打印到stdout,然后你可以在循环体中引用$event
。