运行程序并实时记录到屏幕和文件中

运行程序并实时记录到屏幕和文件中

我编写了一个非常简单的 Python 程序(实际上我的程序要复杂得多):

from time import sleep
for i in range(10):
    print(i)
    sleep(1)

在 10 秒内每秒打印数字 0-9、1。我将其保存为TestShell.py

我可以使用 powershell 运行它

python .\TestShell.py

Tee-Object输出正确,每秒 1 位数字。不过,我还想将输出存储在日志文件中。我预计 使用

python .\TestShell.py | Tee-Object -FilePath .\fileLog.txt

它将日志文件作为一个参数,并隐式写入控制台,无需第二个参数。但是现在,在整个程序运行之前不会打印任何输出。也就是说,我在 10 秒内什么都看不到,然后突然看到数字 0-9。

有没有办法运行(python)文件,并实时输出到终端和日志文件?

答案1

问题是 PowerShellTee-Object不会刷新输出流,而只会等待源执行此操作,因此您会在操作结束时获得输出。这是设计使然。

请改用以下语法逐行编写输出:

python .\TestShell.py | ForEach-Object { Write-Host $_; $_} | Set-Content .\fileLog.txt

答案2

我们可以找到一种方法这里

这是使用 -u 开关来改变 python 本身的缓冲模式,从而

python -u .\TestShell.py | Tee-Object -FilePath .\fileLog.txt

但这并不是解决所有语言问题的方法

相关内容