“ Tee-Object”仅在标准输入终止后才输出输出

时间:2018-06-25 18:50:10

标签: windows powershell cmd

我正在运行的程序具有较大的运行时和较大的输出,因此为了在查看输出时进行记录,我在Windows tee上使用cmd.exe命令:

./program | tee -a program.log

program打印实时输出(在明显的时间间隔后逐行输出),但是tee仅在程序终止后打印输出。有什么方法可以将tee用于实时输出?

注意:问题在Windows powershell.exe上仍然存在

2 个答案:

答案 0 :(得分:2)

Tee-Object不会刷新输出流本身。它等待解释器执行此操作,并且解释器经常等待一会儿。这是设计使然。

我会提出一种解决方案,例如:

./program | ForEach-Object {
    Write-Host $_
    $_
} | Set-Content program.log

如果您仍然遇到问题,请尝试:

./program | ForEach-Object {
    [Console]::WriteLine($_)
    [Console]::Out.Flush()
    $_
} | Set-Content program.log

那应该与Write-Host相同,但是暂时我不确定刷新到控制台的频率。

答案 1 :(得分:0)

虽然目前尚不清楚您在做什么,但听起来您可以使用重定向到输出日志文件的方式,而不是使用tee。

我不熟悉您如何使用AI训练脚本,但是通过将stderr和stout都发送到同一文件,以下操作可能会起作用。然后,您可以使用PowerShell命令“ Get-Content output.log –Wait”或您选择的其他方法来尾随文件。

  

python_script参数1> output.log 2>&1

有关说明,请参见https://support.microsoft.com/en-us/help/110930/redirecting-error-messages-from-command-prompt-stderr-stdout