首页 > 解决方案 > 为什么即使没有指定 file 关键字参数,print 函数也会打印到文件?

问题描述

我偶然发现了由同事编写的类似于以下的代码:

import fileinput

...

with fileinput.input(filename, inplace=1) as file:
    for line in file:
        print("// " + line)

这会在给定文件中的所有行前面加上// . 它不会向标准输出写入任何内容。

为什么即使在没有这样的关键字参数print的情况下调用它也会这样做:file

with open("bar.txt") as bar:
    print("foo", file=bar)

我检查了没有分配给sys.stdout.

标签: pythonpython-3.x

解决方案


inplace=1参数重定向sys.stdout到文件:

https://docs.python.org/3/library/fileinput.html#fileinput.FileInput

可选的就地过滤:如果将关键字参数inplace=True传递给fileinput.input()构造FileInput函数,则将文件移动到备份文件,并将标准输出定向到输入文件(如果与备份文件同名的文件已经存在,它将被静默替换)。这使得编写一个过滤器来重写其输入文件成为可能。

由于默认情况下print写入sys.stdout,因此在这种情况下它会写入文件。


推荐阅读