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

标签 python

在交互式控制台中:

>>> 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/

相关文章:

python - 如何在 celery 中安排工作日感知工作

python - 迭代自身的多个条件应用函数

python - 在 python 中以科学记数法打印非常大的长

python - 如何合并具有重复键的字典列表

python - 在 Python 中从字符串列表创建整数(和元组)列表

for 循环中的 Python 生成器 "chain"

python - 如何将文件读入列表

python - 在正则表达式中捕获组的奇怪行为

python - 分段变换

python - 正则表达式替换匹配项