2

我需要用 Python 模仿 C 的预处理器特性。

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

#ifdef DEBUG
printf(...)
#endif

我只是使用 -DDEBUG 或类似的东西来触发或关闭它。

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

4

3 回答 3

5

您通常在此用例中使用python 日志记录功能。这是在配置文件中配置的,您可以设置输出级别。如果您熟悉的话,它的用法与 java log4j 非常接近。

于 2010-04-21T16:29:25.767 回答
2

您几乎可以使用实际的 C 预处理器。如果您将文件重命名为.cgcc -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

这样,如果您不在调试模式下,您的打印语句不会做任何事情。

于 2010-04-21T16:42:17.923 回答
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

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

旁注:该模块与 python2x 和 python3k 兼容。

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

于 2010-06-07T07:26:39.620 回答