好。我已经完成了我的第一个python程序。它有大约1000行代码。
在开发期间,我在使用print
运行命令之前放置了大量os.system()
语句
说些什么,
print "running command",cmd
os.system(cmd)
现在我已完成该计划。我考虑过对它们进行评论,但重定向所有这些不必要的打印(我不能删除所有print
语句 - 因为有些用户提供了有用的信息)到日志文件中会更有用吗?任何技巧或提示。
答案 0 :(得分:43)
编辑:示例代码:
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
答案 1 :(得分:41)
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()
答案 2 :(得分:8)
下次,如果您从一开始就使用print
模块而不是使用logging
语句,那么您会更开心。它提供了你想要的控件,你可以让它写入stdout,而它仍然在你想要的地方。
这里有很多人建议重定向stdout。 这是一个丑陋的解决方案。它改变了一个全局性 - 更糟糕的是 - 它为这个模块的使用改变了它。我会尽快制作一个将所有print foo
更改为print >>my_file, foo
的正则表达式,并将my_file
设置为stdout或我选择的实际文件。
sys.stdout
那样丑陋。 os.system
几乎总是不如使用subprocess
模块。后者不需要调用shell,也不会以通常不需要的方式传递信号,并且可以以非阻塞方式使用。
答案 3 :(得分:2)
您可以将sys.stdout替换为与sys.stdout具有相同接口的任何对象,在该对象的写入中您也可以打印到终端和文件。例如看到这个食谱http://code.activestate.com/recipes/119404-print-hook/
答案 4 :(得分:2)
使用日志记录模块重定向stdout和stderr的简单方法是: How do I duplicate sys.stdout to a log file in python?
答案 5 :(得分:2)
您可以创建日志文件并准备写入。然后创建一个函数:
def write_log(*args):
line = ' '.join([str(a) for a in args])
log_file.write(line+'\n')
print(line)
然后用write_log()
替换你的print()函数名答案 6 :(得分:1)
将您自己的文件放在sys.stdout
中,可以通过print
捕获文本输出。
答案 7 :(得分:0)
只是关于添加与写入模式的注释。如果要替换日志文件,请将文件模式更改为“ w”。我还不得不注释掉流。然后使用logging.info()输出到指定的文件。
if __name__ == '__main__':
LOG_FORMAT = '%(asctime)s:%(levelname)s ==> %(message)s'
logging.basicConfig(
level=logging.INFO,
filename="logfile",
filemode="w",
format=LOG_FORMAT
#stream=sys.stdout
)
答案 8 :(得分:0)
有很多方法可以将输出写入'.log'文件
日志记录是一种跟踪文件运行时发生的事件的方法。也表示发生了某些事件。
import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This is debug message')
logging.info('This is information message')
logging.warning('This is warning message')
logging.error('This is warning message')
用于减少所有事情的另一种方法,使您打印到控制台的所有内容都将保存到“日志”文件中
python abc.py > abc.log
通过使用这种方法,您可以将所有内容写入日志文件