繁体   English   中英

python 中的默认 sys.stdout

[英]Default sys.stdout in python

标准 sys.out 在 python 中显示以下内容

>>> print('a')
'a'
>>> import sys; sys.out
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>

这个_io.TextIOWrapper是如何实际定义的? 如何在 python 中重新创建(或更改)它?

sys.stdoutsys.stderr分别是标准 output 和错误流的路径。 它们由诸如print()之类的函数在内部使用,并由sys.__stdout__sys.__stderr__ “镜像”,除了恢复原始值之外,它们不应直接用于任何事情。 从我们作为程序员的角度来看,这些也可能是硬编码的——它们是 Python 在启动、加载sys模块时以及在程序实际开始运行之前所做的初始化例程的一部分。

您可以根据需要将sys.stdout更改为任何其他流/文件描述符/任何内容,只要它实现相同的接口(文件描述符应该工作,管道也应该工作,甚至 sockets 如果您将它们包装在适当的自定义类中),并且通常打印到sys.stdout的任何内容(例如内置的print() )都将开始打印到那个。 sys.stderr类似。 实际上, sys()模块的help()消息包括以下内容:

 stdin -- standard input file object; used by input() stdout -- standard output file object; used by print() stderr -- standard error object; used for error messages By assigning other file objects (or objects that behave like files) to these, it is possible to redirect all of the interpreter's I/O.

至于实际的接口, 您可以在此处的 cpython 源代码中找到 python 定义,这应该足以满足您的目的。 大多数 python 安装仅在无法编译实际 C 定义时才将其用作备份,您可能会发现它更难理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM