首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以将stdout重定向到某种字符串缓冲区吗?

我可以将stdout重定向到某种字符串缓冲区吗?
EN

Stack Overflow用户
提问于 2009-08-02 13:47:50
回答 7查看 150.3K关注 0票数 157

我正在使用python的ftplib编写一个小的FTP客户端,但是包中的一些函数并不返回字符串输出,而是打印到stdout。我想将stdout重定向到一个我可以从中读取输出的对象。

我知道可以使用以下命令将stdout重定向到任何常规文件:

代码语言:javascript
复制
stdout = open("file", "a")

但我更喜欢不使用本地驱动器的方法。

我正在寻找类似于Java中的BufferedReader的东西,它可以用来将缓冲区包装到流中。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-08-02 13:57:42

代码语言:javascript
复制
from cStringIO import StringIO # Python3 use: from io import StringIO
import sys

old_stdout = sys.stdout
sys.stdout = mystdout = StringIO()

# blah blah lots of code ...

sys.stdout = old_stdout

# examine mystdout.getvalue()
票数 232
EN

Stack Overflow用户

发布于 2014-03-16 16:18:23

Python 3.4+中有一个contextlib.redirect_stdout() function

代码语言:javascript
复制
import io
from contextlib import redirect_stdout

with io.StringIO() as buf, redirect_stdout(buf):
    print('redirected')
    output = buf.getvalue()

这是一个code example that shows how to implement it on older Python versions

票数 113
EN

Stack Overflow用户

发布于 2017-08-27 05:45:56

Python3的上下文管理器:

代码语言:javascript
复制
import sys
from io import StringIO


class RedirectedStdout:
    def __init__(self):
        self._stdout = None
        self._string_io = None

    def __enter__(self):
        self._stdout = sys.stdout
        sys.stdout = self._string_io = StringIO()
        return self

    def __exit__(self, type, value, traceback):
        sys.stdout = self._stdout

    def __str__(self):
        return self._string_io.getvalue()

像这样使用:

代码语言:javascript
复制
>>> with RedirectedStdout() as out:
>>>     print('asdf')
>>>     s = str(out)
>>>     print('bsdf')
>>> print(s, out)
'asdf\n' 'asdf\nbsdf\n'
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1218933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档