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页
谁可以帮我解释一下吗?非常感谢 展开
代码如下:
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页
谁可以帮我解释一下吗?非常感谢 展开
1个回答
展开全部
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,还原原来的默认输入流
于是后面就输出到默认的控制
在 输入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,还原原来的默认输入流
于是后面就输出到默认的控制
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询