python - 为什么即使没有指定 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
.
解决方案
inplace=1
参数重定向sys.stdout
到文件:
https://docs.python.org/3/library/fileinput.html#fileinput.FileInput
可选的就地过滤:如果将关键字参数
inplace=True
传递给fileinput.input()
构造FileInput
函数,则将文件移动到备份文件,并将标准输出定向到输入文件(如果与备份文件同名的文件已经存在,它将被静默替换)。这使得编写一个过滤器来重写其输入文件成为可能。
由于默认情况下print
写入sys.stdout
,因此在这种情况下它会写入文件。
推荐阅读
- excel - 如何在状态栏中为 Microsoft Excel 365 MSO 64 位中的总和添加逗号分隔符?
- c++ - Qt 添加 libQGLViewer
- grep - 如何使用 grep 删除多列(仅第一列)?
- python - 在 Python 中查找两个字符之间的字符
- python - Wtforms:SelectField 的验证错误消息
- python - 将数字在python 3中掷骰子的总次数相加
- microsoft-graph-api - 如何使用 Microsoft graph 在管理员的应用程序日历中创建事件?
- laravel - 拉拉维尔。如何将嵌套数据插入数据库
- typescript - Typescript:检测函数的泛型类型
- delphi - 共享内存 - 访问冲突