当前位置:  开发笔记 > 编程语言 > 正文

切换python打印的最佳方法是什么?

如何解决《切换python打印的最佳方法是什么?》经验,为你挑选了3个好方法。

我在游戏引擎中运行Python 2.4,我希望能够在需要时关闭所有打印件.例如,我想打开调试版本的打印件,然后关闭发布版本.它必须尽可能透明.

我在引擎的C代码中解决这个问题的方法是printfvararg宏中使用该函数,并定义在发布版本中不执行任何操作.

这是我目前的解决方案:

DebugPrints = True
def PRINT (*args):
    global DebugPrints
    if DebugPrints:
        string = ""
        for arg in args:
            string += " " + str(arg)
        print string

它可以轻松切换打印输出,但可能有更好的格式化字符串的方法.我的主要问题是,这实际上是为程序添加了更多的函数调用.

我想知道你是否可以对print关键字如何工作做些什么?



1> Daren Thomas..:

是的,你可以分配sys.stdout你想要的任何东西.用一个write什么都不做的方法创建一个小类:

class DevNull(object):
    def write(self, arg):
        pass

import sys    
sys.stdout = DevNull()
print "this goes to nirvana!"

使用相同的技术,您还可以通过设置sys.stdout打开的文件对象将打印件记录到文件中.



2> DNS..:

我知道答案已被标记为正确,但Python有一个调试标志,可提供更清晰的解决方案.你这样使用它:

if __debug__:
    print "whoa"

如果使用-O或-OO调用Python(就像通常用于发布版本一样),__debug__则设置为False.更好的是,这__debug__是口译员的一个特例; 它实际上会在写入pyc/pyo文件时删除该代码,从而使得生成的代码更小/更快.请注意,您无法为其分配值__debug__,因此它完全基于这些命令行参数.



3> dbr..:

该记录模块是"最好"的方式.虽然我经常只使用一些简单的像..

class MyLogger:
    def _displayMessage(self, message, level = None):
        # This can be modified easily
        if level is not None:
            print "[%s] %s" % (level, message
        else:
            print "[default] %s" % (message)

    def debug(self, message):
        self._displayMessage(message, level = "debug")
    def info(self, message):
        self._displayMessage(message, level = "info")

log = MyLogger()
log.info("test")

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有