ok. here it is in all it's glory: pcanopener.py will run in the same directory as pcan.h and libpcan.h; it will print to standard output the source code of pcan.py, which should be a complete and functional wrapper for everything that pcan.h and libpcan.h have to offer. basically, you run pcanopener once after the libraries change: python pcanopener.py > pcan.py after that, the following should sort of work: import pcan can = pcan.CAN.open( pcan.HW_USB ) stmt = "Arf!" msg = pcan.Msg( 0x1D, pcan.MSGTYPE_STANDARD, len(stmt) ) msg.DATA[:len(stmt)] = tuple(map(ord,stmt)) pcan.CAN.write( can, msg ) You should also be able to pick things apart byte by byte by using the PCAN union and accessing .raw