如何在python中将sys.stdout重新附加到控制台窗口?

时间:2015-06-18 20:40:10

标签: python io stdout stringio redirectstandardoutput

我的python 3涂鸦就像这样:

import io, sys
sys.stdout = io.StringIO()
# no more responses to python terminal funnily enough

我的问题是当我传入1+1时如何重新附加,例如它会以2返回控制台?

这是在Windows 7 64位上运行的32位python上的python解释器。

2 个答案:

答案 0 :(得分:3)

您正在寻找sys.__stdout__

  

它还可以用于将实际文件还原到已知的工作文件对象,以防它们被破坏的对象覆盖。但是,执行此操作的首选方法是在替换之前显式保存上一个流,并还原已保存的对象。

答案 1 :(得分:1)

我不确定你是如何接受输入的,但这会做你想做的事情:

import io, sys

f = io.StringIO()
sys.stdout = f

while True:
    inp = input()
    if inp == "1+1":
        print(inp)
        break
sys.stdout = sys.__stdout__
print(eval(f.getvalue()))

或者获取inp的最后一个值:

import io, sys

f = io.StringIO()
sys.stdout = io.StringIO()

while True:
    inp = input()
    if inp == "1+1":
        print(inp)
        break
sys.stdout = sys.__stdout__
print(eval(inp))

或者遍历stdin:

import io, sys

sys.stdout = io.StringIO()
for line in sys.stdin:
    if line.strip() == "1+1":
        print(line)
        break
sys.stdout = sys.__stdout__
print(eval(line))