Python中与Java OutputStream等效的对象是什么?

4 投票
3 回答
8539 浏览
提问于 2025-04-16 08:55

有没有类似于Java中 OutputStreamPrintWriter 的Python方法或者说是类似的东西?

我想要一个可以代表不同输出目标的工具,比如标准输出(stdout)或标准错误(stderr),或者一个文件,甚至是其他的东西(像管道、套接字或者一个虚拟的接收器),这样我就可以不管它具体是什么类型,直接把输出发送给它。

我该怎么做呢?

3 个回答

1

你只需要一个对象,它能够实现文件、管道、流等所具备的方法。例如,当我想让我的Python程序独立运行,并且想要重定向系统的错误输出(sys.stderr)和标准输出(sys.stdout)时,我有时会使用这个类:

class Log(object):
    """used for logging for background process"""
    def __init__(self, f):
            self.f = f
    def write(self, s):
            self.f.write(s)
            self.f.flush()
sys.stdout = sys.stderr = Log(open('/tmp/daemonlog', 'a+'))
3

看看这个io模块和这个StringIO模块。

8

在Python中,“抽象出它是什么类型”是自动进行的,这个过程叫做“鸭子类型”。你只需要把任何像文件的对象传给函数,让它使用这些像文件的对象的接口就可以了。

顺便提一下,标准的输入/输出/错误流在sys模块中用stdinstdoutstderr来表示。如果你想要可以读写字符串的像文件的对象,可以使用StringIO模块。

撰写回答