繁体   English   中英

如何以Python方式打印和写入相同的字符串(对一个对象进行两次操作)

[英]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.stdoutStreamHandler和用于记录文件的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM