Python,将一些输出从 shell 重定向到文件

Python, redirect some output to file from shell

我有一个这样的 Python 文件:

#!/usr/local/bin/python3.9
print("Writing to file...")
print({"test": 1})

我是 运行 它来自 shell 这样的:

./script.py > output.json

将以下内容写入 output.json

Writing to file...
{'test': 1}

我想要实现的行为是将第一个打印语句仅打印到控制台,并将第二个打印语句写入文件。即我希望 some 正常打印,some 写入文件。像这样:

#!/usr/local/bin/python3.9
print("Writing to file...")  # only prints to console
print({"test": 1})  # only writes to output.json

如何修改我的代码来实现这一点? shell 命令不变很重要。

最简单的解决方案是让您想要转到 shell 的内容转到 stderr,而不是 stdoutprint 的默认目标):

#!/usr/local/bin/python3.9

import sys

print("Writing to file...", file=sys.stderr)  # prints to console because stderr not redirected
print({"test": 1})  # writes to output.json because stdout is redirected

如果用户愿意,他们可以独立地重定向 stderr,但是示例命令会让它转到终端。这通常是程序在未明确将“生产性输出”写入特定文件时将“调试输出”与“生产性输出”分开的方式。