[英]How can I pythonically print and write the same string (two operations on one object)
我目前正在执行此操作,但是我感觉会有一种更简洁的方法来执行此操作,因为我正在编辑代码以将其打印的所有内容写入文件。 是否有以下内容的单线或更简洁的方法? 谢谢
print 'foo bar'
file.write('foo bar')
您可以创建一个类似文件的对象,该对象可以写入许多其他文件:
class Tee(object):
"""A file-like that writes to all the file-likes it has."""
def __init__(self, *files):
"""Make a Tee that writes to all the files in `files.`"""
self._files = files
def write(self, data):
"""Write `data` to all the files."""
for f in self._files:
f.write(data)
然后,您可以创建一个Tee对象:
tee = Tee(sys.stdout, file)
并写给您的发球台:
tee.write(data)
然后输出将转到文件和stdout。
那和获得1一样好-当然,如果您希望将其排成一行,则可以将其包装在function中。 。 。
def print_and_write(fileobj, data):
print data
fileobj.write(data)
1用于通用代码。 对于日志记录的特定情况,使用日志记录模块可能会做得更好,就像其他人在评论中指出的那样
如果您的用例以任何形式记录,请使用具有多个目标的记录器。 在您的情况下,指向sys.stdout
的StreamHandler
和用于记录文件的FileHandler
:
import logging
import sys
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addHandler(logging.FileHandler('out.log')) # log to file
logger.addHandler(logging.StreamHandler(sys.stdout)) # log to stdout
logger.info('foo bar')
需要一些设置,但是在此之后,此解决方案非常干净,恕我直言。 并且线程安全。
尝试这个
import sys
outfile = open("test.txt",'w')
[print("foo bar",file = i) for i in [outfile,sys.stdout]]
outfile.close()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.