首页 > 解决方案 > Windows 仅在进程停止后写入文件

问题描述

我写了一个非常简单的脚本来测试 windows 机器的重定向stdout。程序是这样的

# hw.py
def main():
    print('Hello World')
    import time
    time.sleep(1000)

if __name__ == '__main__':
    main()

我使用以下命令运行了这个脚本。

python3 hw.py > hw.log

hw.log通过使用tail -fgit bash 或打开缓冲区实时观察emacs,我注意到它'Hello World'hw.log在进程结束时打印,或者过早取消。


这意味着在将程序输出写入文件时,我无法实时查看程序输出。更糟糕的是,如果我的程序包含无限的子进程,则程序的任何输出都不会写入文件

我该如何解决这个问题?

标签: pythonwindowsio-redirection

解决方案


要强制 Python stdout 和 stderr 流无缓冲,您可以传递-u参数。

python3 -u hw.py > hw.log

设置环境变量PYTHONBUFFERRED=1会有同样的效果


推荐阅读