什么是“python -d”?

时间:2013-11-11 13:19:11

标签: python python-2.7

我认为这是用于激活打印所有logging.debug()消息的调试模式。但显然这不会发生。 The documentation只是说:

  

启用解析器调试输出(仅适用于向导,具体取决于编译选项)。   另见PYTHONDEBUG。

这不能解释我眼中的任何事情。有人可以给出更详细的解释并验证是否确实没有默认的CPython Argument来激活调试日志记录?

2 个答案:

答案 0 :(得分:5)

来自Parser/parser.c

#ifdef Py_DEBUG
extern int Py_DebugFlag;
#define D(x) if (!Py_DebugFlag); else x
#else
#define D(x)
#endif

这个D宏与printf()一起用于在提供调试标志时打印调试消息,并且在调试模式下编译解释器。调试消息适用于Python的开发人员,他们在 on Python本身工作的人(不要与Python程序员混淆,他们是使用 Python的人)。我已经浏览了Python手册页,但没有一个激活logging调试模式。但是,可以将-i标记与-c结合使用以实现相同的效果:

python -i -c "import logging;logging.basicConfig(level=logging.DEBUG)"

答案 1 :(得分:3)

-d选项启用python解析器调试标志。除非您正在攻击Python解释器并更改它解析Python代码的方式,否则您不太可能需要该选项。

日志记录基础结构是标准库模块,而不是解释器的内置功能。拥有一个可以改变模块的这种本地化特征的解释器标志没有多大意义。

另外,请考虑日志记录级别如何取决于您正在使用的日志记录器和处理程序。对于应用程序的不同部分,您可以为不同的记录器和处理程序设置不同的级别。例如,当您希望来自任何人的所有DEBUG行都出现在控制台中时,应将libO中的INFO及以上内容记录到公共文件中,并将WARNING和ERROR记录到特定文件以便于监视。您可以为DEBUG设置一个日志记录到控制台的全局处理程序,以及将不同级别记录到单独文件的其他处理程序。