如何将Python脚本的命令输出重定向到文件?

7

我有一个用Python编写的脚本,输出文本到控制台,但我需要将其记录在文件中。然而,这个脚本非常复杂,而我不会Python编程,因此不想对其进行修改。

我想要做到这一点:

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

但这样是行不通的,我猜测 Python 把 >"somefile.txt" 当作参数处理了。如何解决这个问题呢?

1
你的猜测是错误的。它有什么问题?你看到了什么? - immortal
我在控制台中看到了输出,但没有创建文件。 - Garin GG
1
你确定它没有输出到 STDERR 吗? - cfeduke
1
你添加CMD标记是因为你正在从Windows CMD shell运行Python吗?如果是这种情况,如果python script.py ...> somefile.txt 2>&1不起作用,那么脚本会直接写入控制台而不是标准输出或标准错误。 - Eryk Sun
1
可能是重复的问题:如何执行Python脚本并将输出写入txt文件? - Clock Slave
显示剩余5条评论
4个回答

8

$ (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


1
尝试了带括号的那个,文件被创建了,但输出没有被重定向,文件仍然是空的。抱歉,我不理解你所说的其余部分的语法。通过“$”,你是在暗示Linux Bash吗?因为我在谈论Windows命令提示符。 - Garin GG
是的,出现了“'tee' 不是内部或外部命令”的错误。 - Garin GG
1
@GarinGG,Windows没有预装tee命令。你可以安装一个,但是你并没有问这个。只需通过>somefile.txt将stdout重定向到文件,并通过2>&1将stderr重定向到stdout(即同一个文件)。 - Eryk Sun
对不起,习惯了以“$”开头编写我的bash示例,甚至没有考虑过Windows。如果您使用的是Cygwin,它可能会包含“tee”(不确定,已经过去很多年了)。 - cfeduke

3

将以下代码添加到Python文件的开头。

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

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

2

由于这个脚本不是你自己写的,所以我猜测它使用了Python的logging模块。如果是这样的话,你只需要重新配置logging模块来使用标准输出(stdout)。请参考https://dev59.com/hGYq5IYBdhLWcg3w8lNo#28194953中的方法。

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

0
使用:
``` python script.py arg1 arg2 ... argn >> somefile.txt ```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接