我可以在不修改我的整个代码的情况下将打印语句重定向到多个输出吗?

时间:2019-02-18 10:36:33

标签: python python-2.7 printing sys

我知道我可以将打印语句重定向到文件: 导入系统 sys.stdout = open(“ log.txt”,“ w”)

但是同时我需要打印到我的终端。想法是为每份印刷品写印刷陈述。有更好的方法来解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

您可以使用以下答案:How to redirect python subprocess stderr and stdout to multiple files?

基本思想是创建一个多输出文件类型对象,并将其分配给sys.stdout

import sys

class MultiOut(object):
    def __init__(self, *args):
        self.handles = args

    def write(self, s):
        for f in self.handles:
            f.write(s)

with open('q1', 'w') as f1, open('q2', 'w') as f2, open('q3', 'w') as f3:
    # add all the files (including sys.stdout) to which the output should be written
    sys.stdout = MultiOut(f1, f2, sys.stdout)
    for i, c in enumerate('abcde'):
        print(c, 'out')
        print(i, 'err')

答案 1 :(得分:0)

是的,您可以将代码重定向到任意数量的文件,也可以同时重定向到CLI。有必要引入一个新类来覆盖现有的write方法。 尝试以下代码片段,它对我有用:

import sys

class MultiPrinter(object):
    def __init__(self, *targets):
        self.targets = targets
    def write(self, obj):
        for f in self.targets:
            f.write(obj)
            f.flush()

f = open('logs.txt', 'w')
f1 = open('logs1.txt', 'w')
f2 = open('logs2.txt', 'w')
sys_org = sys.stdout
sys.stdout = MultiPrinter(sys_org, f, f1, f2)
print('First Statement.....')
print('Another Statement....')