首页 > 解决方案 > 如何像python中的文件对象一样写入标准输出

问题描述

stdin处理使用和的 python 脚本stdout。默认行为是脚本将写入文件,所以我有这个函数被调用来处理写入文件:

def run_loop(data,name):
    with open(name, 'w') as fo:
        fo.write("webstat output "+t) # t is a date str created in global scope
        for x in data:
            fo.write(processer(x))
        fo.write('\n')

我在脚本中有几个地方使用了这个函数,所以重写它或写一个替换它来使用标准输出会不太方便。当我尝试将 stdout 与 open 一起使用时,sys.stdout 说它是一个 type _io.TextIOWrapper。拨打电话时出现错误,run_loop(same_data,sys.stdout)我收到此错误:

TypeError: expected str, bytes or os.PathLike object, not _io.TextIOWrapper

我想知道是否可以使用open()with stdout?我想既然stdout是文件 io,我应该能够将其作为文件写入。理想情况下,会有一种方法可以更改_io.TextIOWrapper为可以使用的对象open(),但我一直在研究其中的方法类型,sys.stdout它们似乎没有提供这种功能。我不确定为什么无法将fo对象open()设置为stdout

我想要实现的行为是

cat input-data.txt | myscript.py > out.txt

我已经能够让这stdin部分工作,但我仍然不知道如何stdoutopen().

假设我可以放弃open(),如果我可以保持与我调用此函数的其他地方的兼容性:data作为列表,name 通常是应保存输出的文件名字符串。


Python 3.7.5rc1

标签: python-3.xstdout

解决方案


推荐阅读