gpt4 book ai didi

python - 我如何恢复 sys.stdout.close()?

转载 作者:行者123 更新时间:2023-11-28 19:35:36 24 4
gpt4 key购买 nike

在交互式控制台中:

>>> import sys
>>> sys.stdout
<open file '<stdout>', mode 'w' at 0xb7810078>
>>> sys.stdout.close()
>>> sys.stdout # confirming that it's closed
(...) ValueError: I/O operation on closed file

试图恢复:

>>> sys.stdout.open()
(...) AttributeError: 'file' object has no attribute 'open'
>>> sys.stdout.write('foo')
(...) ValueError: I/O operation on closed file

我同意这是一个无聊的问题,但我很好奇 sys.stdout.close() 如何在 Python 中恢复(当然无需重新启动交互式控制台)以及为什么 sys.stdout.open() 不会有道理。

最佳答案

好的,所以我希望你使用的是 unix 系统...

基本上 sys.stdout 只是一个包含任何可写对象的变量。

所以我们可以像这样做魔术

sys.stdout = open("file", "w")

现在我们可以像写入标准输出一样写入该文件。

了解 unix 只是一大箱文件。 Unix 好心地给了我们 /dev/stdout

所以重新打开标准输出很简单

sys.stdout = open("/dev/stdout", "w")

工作完成,您现在打开了一个新的标准输出。

编辑

>>> os.fstat(1)
posix.stat_result(st_mode=8592, st_ino=7, st_dev=11L, st_nlink=1, st_uid=1000, st_gid=5, st_size=0, st_atime=1374230552, st_mtime=1374230552, st_ctime=1374230434)
>>> sys.stdout.close()
>>> sys.stdout = open("/dev/stdout", "w")
>>> sys.stdout.fileno()
3
>>> os.fstat(3)
posix.stat_result(st_mode=8592, st_ino=7, st_dev=11L, st_nlink=1, st_uid=1000, st_gid=5, st_size=0, st_atime=1374230576, st_mtime=1374230576, st_ctime=1374230434)
>>> os.fstat(1)
posix.stat_result(st_mode=8592, st_ino=7, st_dev=11L, st_nlink=1, st_uid=1000, st_gid=5, st_size=0, st_atime=1374230576, st_mtime=1374230576, st_ctime=1374230434)
>>>

关于python - 我如何恢复 sys.stdout.close()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17743052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com