#!/usr/bin/env python

import binascii
import csv
from panda import Panda

def can_logger():
  
  try:
    p = Panda()
  
    outputfile = open('output.csv', 'wb')
    csvwriter = csv.writer(outputfile)
    #Write Header
    csvwriter.writerow(['Bus', 'MessageID', 'Message'])
    print("Writing csv file. Press Ctrl-C to exit...")

    while True:
      can_recv = p.can_recv()
      for address, _, dat, src  in can_recv:
        csvwriter.writerow([str(src), str(address), binascii.hexlify(dat)])

  except KeyboardInterrupt:
    print("Exiting...")
    outputfile.close()

if __name__ == "__main__":
  can_logger()

#!/usr/bin/env python
from __future__ import print_function
import binascii
import csv
import sys
from panda import Panda

def can_logger():
  
  try:
    print("Trying to connect to Panda over USB...")
    p = Panda()
    
  except AssertionError:
    print("USB connection failed. Tryining WiFi...")
    
    try:
      p = Panda("WIFI")
    except:
      print("WiFi connection timed out. Please make sure your Panda is connected and try again.")
      sys.exit(0)

  try:
    outputfile = open('output.csv', 'wb')
    csvwriter = csv.writer(outputfile)
    #Write Header
    csvwriter.writerow(['Bus', 'MessageID', 'Message'])
    print("Writing csv file output.csv. Press Ctrl-C to exit...\n")
  
    bus0_msg_cnt = 0
    bus1_msg_cnt = 0
    bus2_msg_cnt = 0
    
    while True:
      can_recv = p.can_recv()

      for address, _, dat, src  in can_recv:
        csvwriter.writerow([str(src), str(address), binascii.hexlify(dat)])
        
        if src == 0:
          bus0_msg_cnt += 1
        elif src == 1:
          bus1_msg_cnt += 1
        elif src == 2:
          bus2_msg_cnt += 1
        
        print("Message Counts... Bus 0: " + str(bus0_msg_cnt) + " Bus 1: " + str(bus1_msg_cnt) + " Bus 2: " + str(bus2_msg_cnt), end='\r')

  except KeyboardInterrupt:
    print("\nNow exiting. Final message Counts... Bus 0: " + str(bus0_msg_cnt) + " Bus 1: " + str(bus1_msg_cnt) + " Bus 2: " + str(bus2_msg_cnt))
    outputfile.close()

if __name__ == "__main__":
  can_logger()

Add WiFi support, message counts to can_logger example