python标准输出sys.stdout_如何理解python中的sys.stdout和sys.stderr

在普通的C程序中,有三个默认打开的“文件”:stdin、stdout和stderr。在C语言中输入和输出时,默认情况下它们来自stdin和stdout。但是,也可以在代码需要文件的地方使用它们,或者将它们重新分配为新文件。

Python试图“模仿”C的这种行为。当您在Python中print()时,您的文本将被写入Python的sys.stdout。当你做input()时,它来自sys.stdin。异常被写入sys.stderr。

可以重新分配这些变量,以便将代码输出重定向到stdout以外的文件。这与shell redirection非常相似,如果您熟悉的话。您可能这样做的原因是要保留程序输出的日志或使代码“关闭”,即不将输出发送到stdout。因此,在您的示例中:stdout = sys.stdout

try:

sys.stdout = open('file.txt', 'w')

print('blah')

# etc

finally:

sys.stdout.close() # close file.txt

sys.stdout = stdout

sys.stderr = stderr

这段代码不会向控制台打印任何内容,但它会向名为file.txt的文本文件写入“blah”。为了减少此类错误的发生,Python提供了sys.__stdin__和sys.__stdout__,它们始终保持sys.stdin和sys.stdout的原始值。使用以下方法可以简化上述代码:try:

sys.stdout = open('file.txt', 'w')

print('blah')

# etc

finally:

sys.stdout.close() # close file.txt

sys.stdout = sys.__stdout__

Python同时拥有stdout和__stdout__的原因主要是为了方便起见,所以不必创建变量来备份stdout。

但是,我不得不建议你不要养成重新分配的习惯。这样把事情搞砸很容易!如果要保存代码的输出,可以使用shell重定向。如果希望能够记录程序正在执行的操作,请参阅Python的logging模块。如果你想让你的代码更安静,给你的函数一个quiet=False参数,这样你就可以在需要的时候关闭它们!很少有“真正的”需要重新分配stdout等。Python允许您这样做,因为Python给了程序员很多控制权,并希望他们负责。你可以这样做,如果你真的想:>>> import random

>>> random.random = lambda: 1

>>> random.random()

1

>>> random.random()

1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值