我目前正在这样做,但我觉得有一种更简洁的方法可以做到这一点,因为我正在编辑代码以写入文件所打印的所有内容。以下是否有单行或更简洁的内容?感谢
print 'foo bar'
file.write('foo bar')
答案 0 :(得分:2)
您可以创建一个类似文件的对象,该对象可以写入许多其他文件:
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 :(得分:0)
这和你一样好 1 - 当然,如果你想要它在一行中,你可以把它包装在一个函数中。 。
def print_and_write(fileobj, data):
print data
fileobj.write(data)
1 用于通用代码。对于日志记录的特定情况,您可以使用日志记录模块做得更好,正如其他人在评论中指出的那样
答案 2 :(得分:0)
如果您的用例以任何形式登录,请使用带有multiple destinations的记录器。
在您的情况下,StreamHandler
定向到sys.stdout
,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')
需要一些设置,但之后这个解决方案就像它获得的一样干净,恕我直言。并且线程安全。
答案 3 :(得分:0)
试试这个
import sys
outfile = open("test.txt",'w')
[print("foo bar",file = i) for i in [outfile,sys.stdout]]
outfile.close()