2013-01-31 27 views
2

在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這樣的等效方式的字符串?我知道這個問題的不同口味已被問過很多次,如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 

但似乎並不奏效。我得到一些關於打開文件的compaints。

回答

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