`Tee-Object` 仅在 stdin 终止后才打印输出

NIk*_*lla 0 windows powershell cmd

我正在运行一个具有大运行时间和大输出的程序,因此为了在查看输出时进行日志记录,我tee在 windows 上使用命令cmd.exe

./program | tee -a program.log

program打印输出住(具有显着的时间间隙行之后线),但是tee打印仅输出程序终止之后。有什么方法可以tee与实时输出一起使用吗?

注意:该问题在 windows 上也仍然存在 powershell.exe

Bac*_*its 6

Tee-Object不刷新输出流本身。它等待解释器来做,并且解释器经常等待一段时间。这是设计使然。

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

./program | ForEach-Object {
    Write-Host $_
    $_
} | Set-Content program.log
Run Code Online (Sandbox Code Playgroud)

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

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

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