So I have a C program to interface with an i2c device. I need to interface to that device from python. I'm just wondering if it's worth porting the program into a python module or if the amount of effort involved in porting won't outweigh just executing the program using subprocess. I know I'm sure it's different for every application, but I'd like to know if it's even worth my time to learn the python C extensions and port this program.
Update: I have full access to the source of both the C as well as the python. But there is already substantial work done on the python side and I'd like to keep changes to that as minimal is possible, if that matters. And I'd also like to minimize the changes that have to be made to the C. It's doable, but I didn't write it and it involves a lot of by addressing that I'd rather not have to redo.
Don't use the Python C API, there are much easier alternatives, most notably cython.  
cython is a Python-like language, which compiles into C code for the Python c library.  Basically it's C with Python syntax and features (e.g. nice for loops, exceptions, etc.).  cython is clearly the most recommendable way to write C extensions for python.
You might also want to take a look at ctypes, a module to dynamically load C libraries and call functions from them.  If your i2c-code is available as shared library, you can get away with no native binding at all, which eases development and distribution.
Extending python with C module