Python的标准输入输出默认关联到系统的终端流,程序运行时默认从键盘读取输入,将输出打印到终端屏幕。标准输入输出重定向的核心原理是替换Python解释器中管理这些流的引用对象,让输入输出操作指向自定义的文件、内存缓冲区或者其他可读取写入的对象。

Python标准输入输出的默认实现
Python的sys模块中维护了三个标准流对象,分别是sys.stdin(标准输入)、sys.stdout(标准输出)、sys.stderr(标准错误输出)。默认情况下,这三个对象分别关联到系统的标准输入流、标准输出流和标准错误流,所有通过input()函数读取输入、print()函数输出内容的操作,本质上都是调用这三个对象的方法。
我们可以通过简单的代码查看默认的标准流对象类型:
import sys # 查看默认标准流的类型 print(type(sys.stdin)) # 输出 <class '_io.TextIOWrapper'> print(type(sys.stdout)) # 输出 <class '_io.TextIOWrapper'> print(type(sys.stderr)) # 输出 <class '_io.TextIOWrapper'>
重定向的核心原理
重定向的本质是修改sys.stdin、sys.stdout、sys.stderr这三个变量的引用,将它们指向符合文件接口规范的其他对象。只要新对象实现了read()(针对输入流)、write()(针对输出流)等必要方法,就可以替代默认的标准流,实现输入输出的重定向。
标准输出重定向示例
我们可以将标准输出重定向到自定义的文件,这样所有print()的输出都会写入到文件中,而不是直接打印到终端:
import sys
# 保存默认的标准输出对象,方便后续恢复
original_stdout = sys.stdout
# 打开一个文件作为新的标准输出
with open('output.txt', 'w', encoding='utf-8') as f:
# 重定向标准输出到文件对象
sys.stdout = f
print('这段文字会被写入到output.txt文件中')
print('而不是打印到终端屏幕')
# 恢复默认的标准输出
sys.stdout = original_stdout
print('现在输出已经恢复到终端')
标准输入重定向示例
同样可以将标准输入重定向到文件,这样input()函数会从文件中读取内容,而不是等待用户从键盘输入:
import sys
# 先创建一个包含输入内容的文件
with open('input.txt', 'w', encoding='utf-8') as f:
f.write('测试输入内容')
# 保存默认的标准输入对象
original_stdin = sys.stdin
# 重定向标准输入到文件对象
with open('input.txt', 'r', encoding='utf-8') as f:
sys.stdin = f
# 从文件读取输入,不需要用户手动输入
content = input()
print(f'读取到的内容:{content}')
# 恢复默认的标准输入
sys.stdin = original_stdin
重定向的注意事项
- 重定向操作最好先保存原始的标准流对象,操作完成后及时恢复,避免影响后续其他代码的输入输出逻辑。
- 替换的标准流对象必须实现对应流类型的必要方法,比如输出流需要实现
write()方法,输入流需要实现read()或者readline()方法,否则会抛出属性错误。 - 标准错误输出
sys.stderr的重定向方式和标准输出一致,通常用于将错误信息单独输出到指定文件,和正常输出区分开。
常见应用场景
标准输入输出重定向常用于自动化测试场景,比如模拟用户输入测试程序逻辑,或者捕获程序输出验证结果是否符合预期。也常用于日志记录,将程序的输出和错误信息分别写入不同的日志文件,方便后续排查问题。另外在需要批量处理输入数据的场景中,也可以将输入流重定向到数据文件,避免手动逐行输入。
Python标准输入输出重定向sys_module修改时间:2026-07-23 21:30:28