python 相当于 java OutputStream?

发布于 2024-10-09 07:20:09 字数 384 浏览 5 评论 0原文

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

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

我该怎么做?

Is there a Python equivalent / pseudo-equivalent to java's OutputStream or PrintWriter?

I want to be able to have a handle that represents either a stream like stdout/sterr, or a file, or something else (a pipe or a socket or a dummy sink) and abstract away what kind of thing it is, so I can just send output to it.

How can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

墨落画卷 2024-10-16 07:20:09

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

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

"Abstracting away what type it is" happens automatically in Python - it's called 'duck typing'. Just pass any file-like object to the function, and have it use the interface of file-like objects.

FWIW, the standard input/output/error streams are represented by stdin, stdout and stderr in the sys module. To get file-like objects that read and write strings, use the StringIO module.

和我恋爱吧 2024-10-16 07:20:09

看一下 ioStringIO 模块。

Take a look at the io and StringIO modules.

空袭的梦i 2024-10-16 07:20:09

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

you just need an object that implements the methods that files, pipes, streams, etc... also implement. for instance, i use this class sometimes when i want to detach my python program and i want to redirect 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+'))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文