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
,而不是 stdout
(print
的默认目标):
#!/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
,但是示例命令会让它转到终端。这通常是程序在未明确将“生产性输出”写入特定文件时将“调试输出”与“生产性输出”分开的方式。
我有一个这样的 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
,而不是 stdout
(print
的默认目标):
#!/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
,但是示例命令会让它转到终端。这通常是程序在未明确将“生产性输出”写入特定文件时将“调试输出”与“生产性输出”分开的方式。