如何在python-can中正确关闭CAN总线以实现重复使用?
解决python-can重复运行总线占用问题
直接给两种可行方案:
- 推荐:用
with语句自动管理总线
这是python-can官方推荐的资源管理方式,脚本结束后会自动释放总线,完全不用手动处理关闭:
import can with can.interface.Bus(bustype='pcan', channel='PCAN_USBBUS1', bitrate=500000) as bus2: msg = can.Message( arbitration_id=0x42, data=[0, 25, 0, 1, 3, 1, 4, 1], is_extended_id=False ) bus2.send(msg)
- 手动关闭:调用
shutdown()方法
如果你需要手动控制关闭时机,别用close(),python-can的总线接口用的是shutdown()来释放资源,把它放在代码最后(最好用try/finally保证一定会执行):
import can bus2 = can.interface.Bus(bustype='pcan', channel='PCAN_USBBUS1', bitrate=500000) try: msg = can.Message( arbitration_id=0x42, data=[0, 25, 0, 1, 3, 1, 4, 1], is_extended_id=False ) bus2.send(msg) finally: bus2.shutdown()
之所以close()不存在,是因为python-can的抽象总线接口定义的关闭方法是shutdown(),不同硬件后端都会实现这个方法来释放对应的总线资源。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

