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
相关产品推荐
相关产品推荐

