You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中stdin与stdout重定向问题:两段代码差异及失效原因问询

Python中stdin/stdout重定向的差异解析

先看你写的第一段代码:

from sys import stdin, stdout

stdin = open('in.txt','r')
stdout = open('out.txt','w')

for line in stdin:
    print(line)

这段能读取in.txt但print仍输出到终端,原因很直接:from sys import stdin, stdout只是把sys模块里的这两个对象复制了一份到当前代码的局部作用域,之后你给stdin、stdout赋值新的文件对象,只是修改了局部变量的指向,根本没改动sys模块里的原始stdin和stdout。而Python的print函数默认是往sys.stdout这个模块级别的对象输出,不是你当前作用域里的那个stdout变量,所以自然还是输出到终端。

再看第二段正常工作的代码:

import sys

sys.stdin = open('in.txt','r')
sys.stdout = open('out.txt','w')

for line in sys.stdin:
    print(line)

这段是直接修改了sys模块里的stdin和stdout变量——print函数默认依赖的就是sys.stdout,改了模块里的这个变量后,所有默认的print输出都会指向你打开的out.txt,重定向自然成功。

最后你尝试的第三个版本:

from sys import stdin, stdout

stdin = open('in.txt', 'r')
stdout = open('out.txt', 'w')

for line in stdin:
    print(line, file=stdout)

这段绕开了sys.stdout的默认设置,直接给print函数的file参数指定了你自己打开的stdout文件对象,相当于强制让print输出到这个文件,因此也能正常运行。

内容的提问来源于stack exchange,提问作者kotori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 07:39:56