
6.5 标准输入、输出和错误流
6.5.1 标准输入、输出和错误流文件对象
在程序启动时,Python自动创建并打开3个文件流对象,即标准输入流文件对象、标准输出流文件对象和错误输出流文件对象。
使用sys模块的sys.stdin、sys.stdout和sys.stderr可以查看对应的标准输入、标准输出和标准错误流文件对象。

标准输入流文件对象默认对应于控制台键盘。标准输出流文件对象和错误输出流文件对象默认对应于控制台,其区别仅在于后者是非缓冲的。
sys.stdout的对象方法write()用于输出对象的字符串表示到标准输出。事实上,print()函数就是调用sys.stdout.write()方法。
【例6.10】 标准输出流示例。

6.5.2 读取任意长度的输入流
程序可以从输入流(sys.stdin)中读取数据直到输入流为空。理论上,输入流的大小没有限制。现代操作系统通常使用组合键Ctrl+D指示输入流结束(也有操作系统使用组合键Ctrl+Z,例如Windows操作系统)。
与使用命令行参数相比,标准输入允许用户与程序进行交互(使用命令行参数时只能在程序运行前为程序提供数据),且可以读取大量数据(使用命令行参数时有长度限制)。
使用标准输入还可以通过操作系统重定向标准输入的源(例如文件或其他程序的输出),从而实现输入的灵活性。
【例6.11】 计算输入流中数值的平均值(average.py)。

程序运行结果如图6-7所示。
6.5.3 标准输入、输出和错误流重定向
通过设置sys.stdin、sys.stdout和sys.stderr可以实现标准输入、输出和错误流的重定向。例如:

恢复标准输入、输出和错误流为默认值的代码如下。

【例6.12】 标准输出流重定向示例(poweroftwo.py)。从命令行的第一个参数中获取n的值,然后将0~n以及2的0~n次幂的列表打印输出到out.log文件中。

程序运行结果如图6-8所示。

图6-7 计算输入流中数值的平均值

图6-8 标准输出流重定向程序运行结果