Java 将python标准输出读取为字符串

Java 将python标准输出读取为字符串,java,python,string,python-2.7,stdout,Java,Python,String,Python 2.7,Stdout,在Java中,我可以使用 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 co

在Java中,我可以使用

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做这件事的等效方法吗?我知道这个问题已经被问过很多次了,比如和。但我有一种感觉,我不需要导入子流程来获得我需要的,因为我需要的比那个简单。我在eclipse上使用pydev,我的程序非常简单

我已经试过了

from sys import stdout

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

  y = 9 if "ell" in myString else 13

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

如果我理解了您试图正确执行的操作,类似这样的操作将使用对象捕获您写入标准输出的任何内容,这将允许您获取以下值:

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()
然后像这样使用它:

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()