Python中与Java OutputStream等效的对象是什么?
有没有类似于Java中 OutputStream 或 PrintWriter 的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+'))
8
在Python中,“抽象出它是什么类型”是自动进行的,这个过程叫做“鸭子类型”。你只需要把任何像文件的对象传给函数,让它使用这些像文件的对象的接口就可以了。
顺便提一下,标准的输入/输出/错误流在sys
模块中用stdin
、stdout
和stderr
来表示。如果你想要可以读写字符串的像文件的对象,可以使用StringIO
模块。