将 python stdout 重定向到文件仅打印最后一次迭代

问题描述 投票:0回答:1

我已尝试搜索此问题,但找不到与我遇到的问题类似的任何内容。

我有一个 python 脚本,它使用 for 循环来迭代这些情况,对 6 种不同的情况进行一些计算。在每次迭代期间,我都有各种打印语句将某些计算值写入屏幕。当我运行脚本时仅使用

python time_comp.py

我在屏幕上一一得到了所需的输出(即每次迭代的计算值)。但如果我想将标准输出写入文件,它只会写入最后一次迭代的值。

我尝试了很多网上找到的解决方案:

python time_comp.py > out.dat

python time_comp.py >> out.dat

python time_comp.py 1 > out.dat

python time_comp.py 1 | tee out.dat

所有这些仍然只打印最后一次迭代期间的输出。有谁知道如何将所有迭代的值打印到标准输出文件,而无需在脚本本身中实际打开文件?

提前致谢。

python linux stdout
1个回答
0
投票

这可能是缓冲问题。 Python 的标准输出 (stdout) 是有缓冲的。

当运行脚本并将输出定向到文件时,您可以尝试强制 Python 以无缓冲模式运行,这使得 stdout 和 stderr 立即将其输出写入目标文件。您可以使用 -u 选项来做到这一点:

python -u time_comp.py > out.dat

如果您可以控制脚本的源代码,则另一种方法是在每个打印语句之后手动刷新输出缓冲区,确保所有输出都按预期写入文件:

import sys

for case in cases:
    # Your calculation and print statements here
    print('Some output')
    sys.stdout.flush()

© www.soinside.com 2019 - 2024. All rights reserved.