将打印重定向到日志fi

2024-04-25 16:48:15 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧。我已经完成了我的第一个python程序,它有大约1000行代码。 在开发过程中,我在使用os.system()运行命令之前放置了大量print语句 比如说

print "running command",cmd
os.system(cmd)

现在我已经完成了这个计划。我考虑过对它们进行注释,但将所有这些不必要的打印(我不能删除所有print语句,因为有些语句为用户提供有用的信息)重定向到日志文件中会更有用吗?任何技巧或提示。


Tags: 代码用户命令程序cmd信息os过程
3条回答
  • 下一次,如果您从一开始就使用logging模块,而不是使用print语句,您会更高兴。它提供了你想要的控件,你可以让它在你想要的地方写入stdout。

  • 这里有很多人建议重定向stdout。这是一个丑陋的解决办法。它变异了一个全局,更糟糕的是,它为这个模块的使用而变异了它。我宁愿创建一个regex,将所有print foo更改为print >>my_file, foo,并将my_file设置为stdout或我选择的实际文件。

    • 如果应用程序的任何其他部分实际上依赖于对stdout的写入(或者将来任何时候都会依赖于stdout,但您还不知道),这将破坏它们。即使你没有,它也会让你的模块看起来像是在做一件事,而实际上,如果你错过了上面的一小行,它就会做另一件事。
    • 雪佛龙印花相当难看,但远不如临时为流程更改sys.stdout那么难看。
    • 从技术上讲,正则表达式替换不能正确地执行此操作(例如,如果您在多行字符串文本中,它可能会产生误报)。然而,它很容易工作,只要留意它。
  • os.system实际上总是不如使用subprocess模块。后者不需要调用shell,不以通常不需要的方式传递信号,并且可以以非阻塞的方式使用。

你应该看看python logging module


编辑:示例代码:

import logging

if __name__ == "__main__":
    logging.basicConfig(level=logging.DEBUG, filename="logfile", filemode="a+",
                        format="%(asctime)-15s %(levelname)-8s %(message)s")
    logging.info("hello")

生成一个名为“logfile”的文件,其内容为:

2012-10-18 06:40:03,582 INFO     hello

Python允许您捕获并分配sys.stdout—如前所述—以执行以下操作:

import sys
old_stdout = sys.stdout

log_file = open("message.log","w")

sys.stdout = log_file

print "this will be written to message.log"

sys.stdout = old_stdout

log_file.close()

相关问题 更多 >

    热门问题