[英]Python-can - can.Logger Listener Issue
Python-can package 中的 can.Logger 侦听器似乎没有将数据记录到文件中。
我知道有 CAN 总线数据,因为 can.Printer() 侦听器正在运行,它将 CAN 流量打印到 output 终端。 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()
问题源于 Pycharm 在选择停止按钮时不发送键盘中断 (CTRL - C) 命令,脚本只是停止。 此外(CTRL-F2)又名停止按钮与 CTRL-C 不同。 这现在可能看起来很明显,但我在一天的大部分时间里都逃脱了。
解决方案:
导航到运行 > 编辑配置 > Select在 output 控制台中模拟终端
从那里键盘中断功能(CTRL-C)将起作用。 从那时起,我的脚本将正确终止通知器、侦听器和总线,从而保存日志文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.