views:

236

answers:

3

I need to mimic the preprocessor feature of C with Python.

If I want to run the debug release, I use as follows with C

#ifdef DEBUG
printf(...)
#endif

I just use -DDEBUG or similar to trigger it on or off.

What method can I use for Python/Ruby? I mean, what should I do to control the behavior of python/ruby scripts in such a way that I can change a variable that affects all the script files in a project?

+5  A: 

You usually use the python logging functionality in this use-case. That is configured in configuration files, and you can set the output levels. Very close in usage to java log4j, if you're familiar with that.

extraneon
+2  A: 

You can almost use the actual C preprocessor. If you rename your file to end in .c, you can then do this: gcc -w -E input/file.py.c -o output/file.py.

The main issue seems to be with comments. The preprocessor will complains about python comment lines being invalid preprocessor directives. You can remedy this by using C++ comments (// comment).

Or, a better idea would be to just write your own simple preprocessor. If you only need #define functionality, you're just talking about a doing a search and replace on your file.

Another solution would be something like this:

def nothing(*args):
    pass

def print_debug(msg):
    print msg

if not DEBUG: 
    print_debug = nothing

That way your print statements don't do anything if you're not in debug mode.

Seth
A: 

I wrote pypreprocessor to do exactly what you described.

Not only can it preprocess source files and handle #define and #ifdef but it also includes some features that make it more than just an on-the-fly preprocessor.

If you're worried about the added performance hit of using a preprocessor, you can set a few optional variables and make the preprocessor output to a clean source file with all of the metadata removed.

Check out the project on Google Code for more info.

The latest release can also be accessed through the PYPI

Evan Plaice