为什么sys.stdout(在python中)没有恢复默认值的默认方法

时间:2018-08-01 09:02:59

标签: python python-3.x

在下面的编程中,首先我们将所有打印重定向到日志文件,然后关闭文件对象,然后再次将print命令重新设置为交互式提示符。

import sys
temp = sys.stdout                 # store original stdout object for later
sys.stdout = open('log.txt', 'w') # redirect all prints to this log file
print("testing123")               # nothing appears at interactive prompt
print("another line")             # again nothing appears. it's written to log file instead
sys.stdout.close()                # ordinary file object
sys.stdout = temp                 # restore print commands to interactive prompt
print("back to normal")           # this shows up in the interactive prompt

为什么python不支持类似的方法来将命令恢复为交互模式

sys.stdout.default()

1 个答案:

答案 0 :(得分:1)

它几乎存在:sys.stdout = sys.__stdout__在程序开始时将stdout重置为其原始值

只是它,但可能不会做您想要的。您可能会 stack sys.stdout重定向,在这种情况下,恢复到先前的重定向而不是原始的重定向是有意义的。在IDLE交互式解释器中的一个实际用例。原始的stdout在Windows上将是None,因为它是一个GUI程序,并将被定向到从Linux上启动它的终端。无论哪种情况,重定向后,您当然都不希望使用该 default 原始值,而是使用IDLE设置的原始值。

这就是为什么在重定向原始标准输出时应始终保存原始标准输出,而在不再需要重定向时还原原始标准输出的原因。