[英]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.