用Python / Ruby模仿C预处理器?

时间:2010-04-21 16:24:31

标签: python ruby user-controls preprocessor

我需要用Python模仿C的预处理器功能。

如果我想运行调试版本,我使用C

进行如下操作
#ifdef DEBUG
printf(...)
#endif

我只是使用-DDEBUG或类似方法来启动或关闭它。

我可以在Python / Ruby中使用什么方法? 我的意思是,我应该怎么做才能控制python / ruby​​脚本的行为,以便我可以更改影响项目中所有脚本文件的变量?

3 个答案:

答案 0 :(得分:5)

您通常在此用例中使用python logging功能。这是在配置文件中配置的,您可以设置输出级别。如果您熟悉java log4j,则使用非常接近。

答案 1 :(得分:2)

您几乎可以使用实际的C预处理器。如果您将文件重命名为.c,则可以执行以下操作:gcc -w -E input/file.py.c -o output/file.py

主要问题似乎是评论。预处理器会抱怨python注释行是无效的预处理器指令。您可以使用C ++注释(// comment)来解决此问题。

或者,更好的想法是编写自己的简单预处理器。如果您只需要#define功能,那么您只是在谈论进行搜索并替换您的文件。

另一种解决方案是这样的:

def nothing(*args):
    pass

def print_debug(msg):
    print msg

if not DEBUG: 
    print_debug = nothing

这样,如果您没有处于调试模式,则您的print语句不会执行任何操作。

答案 2 :(得分:2)

使用pypreprocessor

也可以通过PYPI

访问最新版本

以下是基本用法:

from pypreprocessor import pypreprocessor

pypreprocessor.parse()

#define debug

#ifdef debug
print('The source is in debug mode')
#else
print('The source is not in debug mode')
#endif

你去吧。 C样式预处理器条件编译在python中实现。

SideNote:该模块兼容python2x和python3k。

免责声明:我是pypreprocessor的作者。