Python-can 包中的 can.Logger 侦听器似乎没有将数据记录到文件中。
我知道有 CAN 总线数据,因为 can.Printer() 侦听器正在运行,它将 CAN 流量打印到输出终端。can.Logger 侦听器似乎确实在目录中创建了 .asc 或 .blf 文件(文件arg 中的文件类型是什么,它都会创建该文件),但它不会向其中写入任何信息。
我认为它可能是模式arg,但从 'w' 或 'a' 等更改它似乎并没有什么不同。
知道为什么会发生这种情况吗?
我正在使用 Python 3.8.3、PyCharm 2020.1.2 社区版、Windows 10
def bus_log():
bus = can.interface.Bus(bustype='pcan', channel='PCAN_USBBUS1', bitrate=500000)
logger = can.Logger('bus_log.asc', 'w')
notifier = can.Notifier(bus, [can.Printer(), logger])
try:
while True:
time.sleep(0.001)
except KeyboardInterrupt:
bus.shutdown()
notifier.stop()
if __name__ == "__main__":
bus_log()
编辑 1: 在重新排列代码和一些试验和错误之后,Try-Except 块似乎是问题所在。我仍然不明白为什么它不起作用。但我怀疑这与 PyCharm 的键盘中断功能有关。在我的原始代码中,我希望 KeyboardInterrupt 会发生,当它发生时,我会关闭总线和通知程序。但是我的理论是这没有发生,所以我的文件没有关闭。这是我的新代码有效:
def bus_log():
bus = can.interface.Bus(bustype='pcan', channel='PCAN_USBBUS1', bitrate=500000)
logger = can.Logger('bus_log.asc', 'a')
notifier = can.Notifier(bus, [can.Printer(), logger])
time_1 = time.perf_counter()
while True:
time_2 = time.perf_counter()
if time_2 >= time_1 + 5:
notifier.stop()
bus.shutdown()
return
if __name__ == "__main__":
bus_log()