我在游戏引擎中运行Python 2.4,我希望能够在需要时关闭所有打印件.例如,我想打开调试版本的打印件,然后关闭发布版本.它必须尽可能透明.
我在引擎的C代码中解决这个问题的方法是printf在vararg宏中使用该函数,并定义在发布版本中不执行任何操作.
这是我目前的解决方案:
DebugPrints = True
def PRINT (*args):
global DebugPrints
if DebugPrints:
string = ""
for arg in args:
string += " " + str(arg)
print string
Run Code Online (Sandbox Code Playgroud)
它可以轻松切换打印输出,但可能有更好的格式化字符串的方法.我的主要问题是,这实际上是为程序添加了更多的函数调用.
我想知道你是否可以对print关键字如何工作做些什么?
Dar*_*mas 12
是的,你可以分配sys.stdout你想要的任何东西.用一个write什么都不做的方法创建一个小类:
class DevNull(object):
def write(self, arg):
pass
import sys
sys.stdout = DevNull()
print "this goes to nirvana!"
Run Code Online (Sandbox Code Playgroud)
使用相同的技术,您还可以通过设置sys.stdout打开的文件对象将打印件记录到文件中.
DNS*_*DNS 10
我知道答案已被标记为正确,但Python有一个调试标志,可提供更清晰的解决方案.你这样使用它:
if __debug__:
print "whoa"
Run Code Online (Sandbox Code Playgroud)
如果使用-O或-OO调用Python(就像通常用于发布版本一样),__debug__则设置为False.更好的是,这__debug__是口译员的一个特例; 它实际上会在写入pyc/pyo文件时删除该代码,从而使得生成的代码更小/更快.请注意,您无法为其分配值__debug__,因此它完全基于这些命令行参数.
该记录模块是"最好"的方式.虽然我经常只使用一些简单的像..
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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1657 次 |
| 最近记录: |