sys模块stdin||stdout||stderr结构及用法

sys包被用于管理Python自身的运行环境。Python是一个解释器(interpreter), 也是一个运行在操作系统上的程序。我们可以用sys包来控制这一程序运行的许多参数,比如说Python运行所能占据的内存和CPU, Python所要扫描的路径等。另一个重要功能是和Python自己的命令行互动,从命令行读取命令和参数。

  • sys.stdin\stdout\stderr

stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象.,是内建在每一个UNIX系统中的管道。

当你print某些东西时,结果就是前往stdout管道;当程序出错并打印出调试信息时,信息前往stderr管道。

如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device )。

stdout 是一个类文件对象;调用它的 write 函数可以打印出你给定的任何字符串。
实际上,这就是 print 函数真正做的事情(它在你打印的字符串后面加上一个硬回车,然后调用 sys.stdout.write 函数)。
KaTeX parse error: Expected 'EOF', got '\n' at position 40: …ut.write('sth',\̲n̲)
stdout 和 stderr 都是类文件对象,但是它们都是只写的。
它们都没有 read 方法,只有 write 方法。然而,它们仍然是类文件对象,因此你可以将其它任何 (类) 文件对象赋值给它们来重定向其输出。

  • 重定向

print('Dive in')                 # 标准输出
saveout = sys.stdout            # 在重定向前保存stdout,这样的话之后你还可以将其设回正常
fsock = open('out.log', 'w')    # 打开一个新文件用于写入。如果文件不存在,将会被创建。如果文件存在,将被覆盖。
sys.stdout = fsock              # 所有后续的输出都会被重定向到刚才打开的新文件上。

print('This message will be logged instead of displayed')    # 这样只会将输出结果“打印”到日志文件中;屏幕上不会看到输出

在这里插入图片描述

  • Reference

  1. Python标准库——走马观花
  2. 深入 Python :Dive Into Python 中文版
  3. python os和sys模块的区别?
  4. python重定向sys.stdin、sys.stdout和sys.stderr

猜你喜欢

转载自blog.csdn.net/The_Time_Runner/article/details/89737779