我需要用Python来模拟C的预处理器特性。用Python/Ruby模仿C预处理器?
如果我想运行调试版本,我使用的以C
#ifdef DEBUG
printf(...)
#endif
我只是用-DDEBUG或类似的触发或关闭如下。
我可以在Python/Ruby中使用什么方法? 我的意思是,我该如何控制python/ruby脚本的行为,以便可以更改影响项目中所有脚本文件的变量?
我需要用Python来模拟C的预处理器特性。用Python/Ruby模仿C预处理器?
如果我想运行调试版本,我使用的以C
#ifdef DEBUG
printf(...)
#endif
我只是用-DDEBUG或类似的触发或关闭如下。
我可以在Python/Ruby中使用什么方法? 我的意思是,我该如何控制python/ruby脚本的行为,以便可以更改影响项目中所有脚本文件的变量?
您几乎可以使用实际的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
这样,如果你在调试模式不是你的打印语句没有做任何事情。
您通常在此用例中使用python logging功能。这是在配置文件中配置的,您可以设置输出级别。如果您熟悉java log4j,则使用非常接近。
最新版本,也可以通过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
你去那里。用python实现的C风格预处理器条件编译。
注意事项:该模块兼容python2x和python3k。
声明:我是pypreprocessor的作者。
为什么不实际使用C预处理器?这是我的一位同事在Javascript源代码中进行条件编译时所做的。 – 2010-04-21 16:31:33
你想要你的代码实际预处理?即这些行是否会对性能造成一定的影响,因此在某些情况下需要删除它们,或者仅仅是为了方便使用command参数来影响程序行为?因为,如果后者是这种情况,那么在代码本身中实现逻辑可能有一点意义(使用optparse等)。 – 2010-04-21 17:11:41