Python中如何将print输出重定向到文件

print ‘\t’.join((ar[‘new’],str(ar[‘good’])))
请问如何修改为同时输出到一个文本文件 good.txt 中,谢谢。
Python中如何将print输出重定向到文件

22 回复

应该先 open 这个 good.txt ,再 save 吧


在Python里把print输出写到文件,最直接的办法就是用file参数。比如:

with open('output.txt', 'w') as f:
    print('Hello, World!', file=f)

这样Hello, World!就会写到output.txt文件里,不会在控制台显示。

如果你想把所有print输出都重定向,可以临时重定向sys.stdout

import sys

original_stdout = sys.stdout
with open('output.txt', 'w') as f:
    sys.stdout = f
    print('这行会写入文件')
    print('这行也会写入文件')
sys.stdout = original_stdout  # 恢复标准输出
print('这行回到控制台')

更简洁的写法是用contextlib.redirect_stdout(Python 3.4+):

from contextlib import redirect_stdout

with open('output.txt', 'w') as f, redirect_stdout(f):
    print('所有print输出都进文件了')
print('现在又回到控制台了')

如果既要写文件又要看控制台输出,可以自己写个类同时处理:

class Tee:
    def __init__(self, *files):
        self.files = files
    
    def write(self, text):
        for f in self.files:
            f.write(text)
    
    def flush(self):
        for f in self.files:
            f.flush()

import sys
with open('output.txt', 'w') as f:
    original_stdout = sys.stdout
    sys.stdout = Tee(original_stdout, f)
    print('这行同时输出到控制台和文件')
    sys.stdout = original_stdout

总结:根据需求选合适的方法就行。

content = ‘\t’.join((ar[‘new’],str(ar[‘good’])))
print(content)
with open(‘test.txt’, ‘wb’) as f:
f.write(content)

python your-script.py | tee good.txt

自己定义一个方法,不调用默认的。
python<br>def myprint(obj):<br> print(obj)<br> with open('abc.log','w+') as f:<br> f.write(obj)<br>

应该需要 a+吧

为什么不用 logging

现在一般都推荐学习 python3 了哇
测试环境的话, 可以把结果直接重定向到文件
python3 aaa.py >>log.txt

重定向正解

os.dup2(fileno, system.stdout.fileno)

Py3 可以直接定向输入到文件

>>>f = open(‘abc.txt’,‘w’)
>>>print(‘a’,file=f)

我是直接 os.system(“echo ‘xxx’ >> xxx.txt”)

已解决就分享一下解决方法啊

嗯嗯,同意,问题的最后最好总结一下方便来者

python xxx.py > good.txt

py2: print>>f, content
py3: print(content, file=f)

sys.stdout=f
def another_print… print=another_print

c:<a target="_blank" href=“http://1.py” rel=“nofollow noopener”>1.py >> 1.txt

用重定向符的 os syatem 的
都是不求甚解 的

回到顶部