【问题标题】:How to store output printed on terminal console to a text file in Python如何将终端控制台上打印的输出存储到 Python 中的文本文件中
【发布时间】:2020-07-15 07:37:21
【问题描述】:

我有一个大型 python 脚本。它在我的终端控制台上打印一堆输出。问题是打印并没有完全发生。一些打印语句一起打印一个语句块,然后在代码的其他部分打印一些东西。只要主循环运行,它就会继续运行。

问题是我得到了我想要的输出,但所有都打印在控制台上,因为这是我们运行 python 主脚本的地方。

如果在控制台打印的同时,我可以将控制台中的所有输出以相同的格式保存到一个文本文件中,这将非常有帮助。

同样,整个脚本的不同部分都出现了一堆打印语句。所以不确定如何将控制台的整个输出以相同的格式保留到最终的文本文件中。

【问题讨论】:

  • 你用什么系统?
  • 当前在 mac 终端上运行。但最终脚本 wud 在服务器上的 linux shell 上运行。脚本是用python编写的
  • python -u my.py | tee my_file.txt
  • 这也会在控制台上打印输出吗?
  • 你有没有想过logging

标签: python


【解决方案1】:

您必须将file 参数添加到print() 函数

print('whatever', file = file_name)

【讨论】:

  • 我必须将它添加到所有打印语句中?我有很多这样的版画。我也希望在控制台中打印输出。
  • @Baktaawar 是的,您必须添加所有内容。如果您使用的是Pycharm,这很容易。它将被打印并保存到文件中
  • @Baktaawar 还有一种方法sys.stdout = open('file_name'', 'a')
  • 使用 VScode.. 目前在 jupyter 上测试代码。但最终代码必须在控制台中作为脚本运行。快速检查 - 将文件添加到所有打印件是否也会像往常一样将输出打印到控制台
  • 这个 sys.stdout 是否只需要在顶部一次?或者在每个打印语句之后
【解决方案2】:

我宁愿继续使用 bash 并使用 tee 命令。它也将输出重定向到一个文件。

python -u my.py | tee my_file.txt

【讨论】:

  • 我们如何在脚本中做到这一点。事情是我想带走用户的更多添加。我希望他们只运行脚本并传递一些参数。它显示输出并将其存储在目录上的文件中。代码将相应地命名文件,而他们不会考虑要保留的文件名。所以 tee 做的事情,但在脚本中
【解决方案3】:

如果你的python脚本是file.py,那么使用:

python3 file.py > output.txt

或者

python file.py > output.txt

取决于您的 python 版本。这条语句(>)会将程序的所有输出写入到stdout文件中,output.txt

编辑:

python3 file.py > output.txt;cat output.txt

以上行可用于在程序执行后打印文件output.txt

编辑2: 使用自定义打印功能的另一个可能选项:

f = open('output.txt')
def custom_print(e = '\n',*s)
    for i in s[:-1]:
        print(i,end=' ')
    print(s[-1],end = e)
    f.write(s)
#Your code
#
f.close()

【讨论】:

  • 它可能只发送到 txt。如何在控制台上也看到相同的输出
  • python file.py > output.txt;cat output.txt 还会将文件打印到控制台,如果您希望它在解释器运行的同时打印,您可能需要使用打印到文件和打印到控制台功能。跨度>
  • 已编辑,再次查看答案。
  • 啊,明白了。有没有办法在脚本中做同样的事情并在终端中运行脚本?问题是在运行脚本时会传递一堆命令行参数。我不想像上面那样在最后添加额外的东西来使它复杂化
  • 什么是s?每次我打印时我都会写这个 custom_print 吗?
【解决方案4】:

如果您想在 Python 脚本中进行重定向,将 sys.stdout 设置为文件对象即可:

import sys
sys.stdout = open('file', 'w')
print('test')

一种更常见的方法是在执行时使用 shell 重定向(在 Windows 和 Linux 上相同):

$ python foo.py > file

查看这个帖子Redirect stdout to a file in Python?

控制台和文件的自定义打印功能,将所有打印替换为代码中的打印。

outputFile = open('outputfile.log', 'w')

def printing(text):
    print(text)
    if outputFile:
        outputFile.write(str(text))

【讨论】:

  • 这也会在控制台上打印输出吗?我希望控制台上的输出以及将相同的输出复制到文件中,而无需在 shell 中进行重定向,但仅在脚本中
  • 好的,我试过了。很好,但是它不会在控制台上打印输出,而是仅将其发送到文件。我们如何才能让用户无需在控制台中添加更多额外命令
  • 我做了 sys.stdout 到文件。它打印到文件。如何回到控制台格式。它不再打印任何内容来控制台。我尝试添加 sys.__stdout__。没有结果
  • 您可以为打印创建自定义函数并将其替换为所有打印件
猜你喜欢
  • 2020-04-24
  • 2021-06-05
  • 2016-11-28
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多