python标准输出重定向stdout.py的意思

我正在学习diveintopython3一书,看到这一段了,代码如下:importsysclassRedirectStdoutTo:def__init__(self,ou... 我正在学习dive into python 3一书,看到这一段了,
代码如下:
import sys
class RedirectStdoutTo:
def __init__(self, out_new):
self.out_new = out_new
def __enter__(self):
self.out_old = sys.stdout
sys.stdout = self.out_new
def __exit__(self, *args):
sys.stdout = self.out_old
print('A')
with open('out.log', mode='w', encoding='utf-8') as a_file, RedirectStdoutTo(a_file):
print('B')
print('C')
不知什么意思,书里也解释了,还是不懂,
这个运行后,输出A C(为什么不输出B? out.log是什么)
如果把其中的三个stdout替换为stderr,输出 A B C。
本问题涉及到的在线阅读页面:http://wenku.baidu.com/link?url=QplW41udLLgplxZf1gp2RZAIuEDIPxKVXAZVnucR3_ypDwkSdmJO_0cJMkzNrEFVZx7F5ElNCLttv2kzXaCHIuO6Rkf9xkL4frqYf9Rd0VO&pn=200
194-196页
谁可以帮我解释一下吗?非常感谢
展开
 我来答
百度网友079a3d640
2014-06-04 · TA获得超过270个赞
知道小有建树答主
回答量:241
采纳率:0%
帮助的人:173万
展开全部
sys.stdout 默认就是输出到控制台(console),print 默认的输出也是 sys.stdout,所以输出到控制台。
在 输入B 那,做了上下文切换with open
,也就是把默认的输出流指向到文件 out.log,
对应的代码是: sys.stdout = self.out_new,这里 out_new -> out.log,out_old = console
所以就print 指向文件,而不是控制台了

离开语句时,执行 sys.stdout = self.out_old => sys.stdout = console,还原原来的默认输入流

于是后面就输出到默认的控制
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式