如何将python脚本cmd输出重定向到文件?

Posted

技术标签:

【中文标题】如何将python脚本cmd输出重定向到文件?【英文标题】:How to redirect python script cmd output to a file? 【发布时间】:2018-01-11 23:13:18 【问题描述】:

所以我有一个将文本输出到控制台的 python 脚本,我需要将它记录到一个文件中,但是该脚本非常复杂,我不编写 python 代码,所以我宁愿不改变它。

我想这样做

>python script.py arg1 arg2 ... argn > "somefile.txt"

但它不起作用,我的猜测是python将>"somefile.txt"作为参数..

这可以实现吗?如何实现?

【问题讨论】:

你的猜测是错误的。以什么方式不起作用?你看到了什么? 我在控制台看到输出,并没有创建文件。 你确定它不输出到 STDERR 吗? 您添加 CMD 标签是因为您从 Windows CMD shell 运行 Python 吗?在这种情况下,如果python script.py ... > somefile.txt 2>&1 不起作用,那么脚本将直接写入控制台而不是 stdout 或 stderr。 How to execute a python script and write output to txt file?的可能重复 【参考方案1】:

$ (python script.py one two) > test.txt

或者,如果您想查看输出并将其写入文件:

$ python script.py one two | tee test.txt

如果这仍然没有写入文件,请尝试重定向STDERR

$ python script.py one two 2>&1 | tee test.txt

【讨论】:

尝试了带括号的那个,文件被创建,但输出没有被重定向,文件仍然是空的。对不起,但我不明白你其余的语法。你用'$'暗示linux bash吗?因为我说的是windows命令提示符 是的,得到“'tee' is not known as an internal or external command...” @GaringGG,Windows 没有通过tee 命令分发。您可以安装一个,但无论如何您都没有问过这个问题。只需通过>somefile.txt 重定向标准输出并通过2>&1 将标准错误重定向到标准输出(即同一个文件)。 是的,抱歉,以前我的 bash 示例以 $ 开头,甚至没有考虑过 Windows。如果您使用的是 Cygwin,它可能包括 tee(不知道,已经好几年了)。【参考方案2】:

将这些代码行添加到 python 文件的开头。

import sys
sys.stdout = open('somefile.txt', 'w')

这是将 sys.stdout 设置为您选择的文件对象。

【讨论】:

【参考方案3】:

由于脚本不是你的,我猜它使用了 python 日志模块。如果是这种情况,那么您只需要重新配置日志记录模块以使用标准输出。请参阅https://***.com/a/28194953/292787 了解如何操作。

import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

【讨论】:

以上是关于如何将python脚本cmd输出重定向到文件?的主要内容,如果未能解决你的问题,请参考以下文章

Python执行脚本文件将输出既能显示控制台又能重定向到日志

如何将“打印”输出重定向到文件?

Python 覆盖不会将输出重定向到文件

如何将标准输出重定向到 CMD 中的程序?

将程序输出重定向到文件和shell [重复]

使用子进程的python脚本,将所有输出重定向到文件