一、创建一个脚本
#!/bin/bash
while [ 1 ];do
python /home/pi/Desktop/ssh_test/Fanban/main.py
done
二、修改/ect/rc.local
在exit 0 前写入
bash ./home/pi/Desktop/ssh_test/Fanban/startup_1.sh
【注】这些路径根据你的实际来定义,用绝对路径
三、python程序的处理
好了,我先说明一下,这个main.py是实现硬件控制,最终是脱离电脑显示屏,鼠标和键盘。最终的作品只有OLED显示屏和一个16键的矩阵键盘。
在程序中,我使用了多个线程。所以,程序该如何处理,才能让脚本实现自启动呢????
通常,多线程报错,它只是对应子线程出错,不会影响到整个进程。
最后,我想到一个办法,先把错误找出来,怎么找呢?比如,我故意把串口通信的端口拔出来,它就出来一个错误。
然后,用try..except..来捕捉这个错误。而且..而且..而且...在每个线程在while里都重复用上try..except...
捕捉到之后,直接执行 os._exit(0) 退出整个程序,那么,脚本就自动重启python程序了。
不过,遇到了奇怪的事情,当I2C设备(OLED小屏幕)的接口端口后,后台它会报错,但是try...except..在所有线程上没有捕捉到,我连main函数都用上了try...except.. 后平台还是没有直接退出整个程序。
只抛出一个错误 : OSerror:[Errno 121] Remote I/O error ,然后其它线程依然正常运行。
难道不可以 except OSerror ???
既然这样,只能手动重启整个程序。
因为整个程序还在运行,其它线程是没问题的,所以,我设定一个重启按键,它能直接执行os._exit(0),
这样,整个程序又恢复正常了。