将python stdout读为字符串

时间:2013-01-31 16:04:57

标签: java python string python-2.7 stdout

在Java中,我可以使用

将stdout读取为字符串
ByteArrayOutputStream stdout = new ByteArrayOutputStream();
System.setOut(new PrintStream(stdout));
String toUse = stdout.toString();

/**
 * do all my fancy stuff with string `toUse` here
 */

//Now that I am done, set it back to the console
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));

有人可以告诉我在python中执行此操作的等效方法吗?我知道这个问题的不同风格已被多次询问,例如Python: Closing a for loop by reading stdoutHow to get stdout into a string (Python)。但我觉得我不需要导入子进程来获得我需要的东西,因为我需要的东西比那更简单。我在eclipse上使用pydev,我编程非常简单。

我已经尝试了

from sys import stdout

def findHello():
  print "hello world"
  myString = stdout

  y = 9 if "ell" in myString else 13

但这似乎不起作用。我得到了一些关于打开文件的建议。

1 个答案:

答案 0 :(得分:2)

如果我已经理解了你正在尝试做什么,那么像这样的东西将使用StringIO对象捕获你写给stdout的任何内容,这将允许你获得值:

from StringIO import StringIO
import sys

stringio = StringIO()
previous_stdout = sys.stdout
sys.stdout = stringio

# do stuff

sys.stdout = previous_stdout

myString = stringio.getvalue()

当然,这会抑制实际输出到原始stdout的输出。如果要将输出打印到控制台,但仍然捕获值,可以使用以下内容:

class TeeOut(object):
    def __init__(self, *writers):
        self.writers = writers

    def write(self, s):
        for writer in self.writers:
            writer.write(s)

并像这样使用它:

from StringIO import StringIO
import sys

stringio = StringIO()
previous_stdout = sys.stdout
sys.stdout = TeeOut(stringio, previous_stdout)

# do stuff

sys.stdout = previous_stdout

myString = stringio.getvalue()