如何在python中将sys.stdout重新附加到控制台窗口?
我的python 3涂鸦是这样的:如何在python中将sys.stdout重新附加到控制台窗口?,python,io,stdout,stringio,redirectstandardoutput,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解释器中。您正在查找: 它还可用于将实际文件还原为已知的工作文件对象,以防它们被损坏的对象覆盖。但是,执行此操作的首选方法是在替换之
import io, sys
sys.stdout = io.StringIO()
# no more responses to python terminal funnily enough
我的问题是如何重新连接,以便当我传入1+1
时,它将返回控制台2
这是在windows 7 64位上运行的32位python上的python解释器中。您正在查找:
它还可用于将实际文件还原为已知的工作文件对象,以防它们被损坏的对象覆盖。但是,执行此操作的首选方法是在替换之前显式保存上一个流,并还原保存的对象
我不确定您是如何接受输入的,但这将满足您的要求:
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))
您在哪里/如何获取输入?我可以@AnandSKumar,但我正在试验stdout的工作方式,如果我要创建一个自定义文件,比如object,可能会将stdout重定向到该对象。@user1561108,您真的要存储所有输出吗?@padraickenningham只是一个学习练习。我要做的是通过将sys.stdout设置为类似对象的伪文件来抑制输出。到目前为止,我的类使用pass实现了flush和write,但当我将sys.stdout设置为它的一个实例时,我的应用程序在运行时抱怨它是对非类型对象的调用flush。