【问题标题】:python equivalent of java OutputStream?python相当于java OutputStream?
【发布时间】:2011-05-29 14:29:06
【问题描述】:

是否有 Python 等效/伪等效于 java 的 OutputStreamPrintWriter

我希望能够拥有一个句柄,它代表像 stdout/sterr 这样的流、文件或其他东西(管道、套接字或虚拟接收器),并抽象出它是什么类型的东西,所以我可以将输出发送给它。

我该怎么做?

【问题讨论】:

    标签: python abstraction


    【解决方案1】:

    看看ioStringIO 模块。

    【讨论】:

      【解决方案2】:

      您只需要一个实现文件、管道、流等也实现的方法的对象。例如,当我想分离我的 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】:

        “抽象出它是什么类型”在 Python 中自动发生 - 它被称为“鸭子类型”。只需将任何类文件对象传递给函数,并让它使用类文件对象的接口。

        FWIW,标准输入/输出/错误流由sys 模块中的stdinstdoutstderr 表示。要获取读写字符串的类文件对象,请使用StringIO 模块。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-13
          • 2018-06-15
          • 2011-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-29
          相关资源
          最近更新 更多