对象的输出在开始睡眠后出现奇怪的延迟

问题描述 投票:2回答:2

由于某种原因,在完成睡眠命令之前,对象不会输出。

[pscustomobject]@{message = 'hi'}; sleep 5

这里是另一个例子。循环完成之前,您将看不到输出。

foreach ($i in 1..60) { 
  if ($i -eq 1) { [pscustomobject]@{message = $i} } 
  sleep 1
}

我想您必须至少输出2个对象才能看到任何东西? ¯\ _(ツ)_ /¯15秒后,您将看到两个对象。

foreach ($i in 1..60) {
  if ($i -eq 1 -or $i -eq 15) { [pscustomobject]@{message = $i} }
  sleep 1
}

或输出足够的属性(> 4)以隐式调用format-list而不是format-table。这马上出来。

[pscustomobject]@{a=1; b=2; c=3; d=4; e=5}; sleep 10

我想知道是否可以像-NoWait一样添加格式表的参数。

powershell object output sleep
2个回答
2
投票

将您的自定义对象放置到Out-Host cmdlet:

[pscustomobject]@{message = 'hi'} | Out-Host; sleep 5

[当使用Out-Host cmdlet时,您将立即向主机显示结果。没有它,对象将输出到管道,直到Start-Sleep cmdlet之后才返回。


1
投票

此行为由臭名昭著的PSv5+ asynchronous behavior of implicitly applied Format-Table output解释:它最多等待300毫秒。在显示输出之前,努力确定合适的列宽。

© www.soinside.com 2019 - 2024. All rights reserved.