我编写了一个非常简单的 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
但这并不是解决所有语言问题的方法