【问题标题】:How to redirect python script cmd output to a file?如何将python脚本cmd输出重定向到文件?
【发布时间】: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。

标签: python cmd


【解决方案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://stackoverflow.com/a/28194953/292787 了解如何操作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-31
      • 2022-01-26
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多