如何实时显示和记录从 PowerShell 调用的 Perl 脚本输出



我正在编写一个PowerShell脚本,该脚本必须调用旧的Perl脚本,并将这个长时间运行的Perl脚本的输出实时显示到PowerShell,就像我通常在Windows命令提示符或交互式Putty SSH会话中查看的那样。 我的要求是将Perl脚本的输出实时写入日志文件,并将结果实时显示到PowerShell。

我的问题是,一旦Perl脚本完成运行,所有结果都会返回到PowerShell或我的日志文件。

下面是我的PowerShell代码的简化示例。

#Test.ps1
$env:Path = "C:Devperl583bin;" + $env:Path
$WORKING_PATH="C:Devscripts"
perl $WORKING_PATHLegacyScript.pl *>> C:Devresultsrealtime_output.txt
exit $LASTEXITCODE

下面是一个示例Perl脚本,它模拟了PowerShell脚本调用的长时间运行的操作:

#LegacyScript.pl
for( $a = 1; $a < 6; $a = $a + 1 ){
print "New value of a: $an";
sleep(10)
}

经过一天的研究,我想我找到了我自己问题的答案,这要归功于 PerlMonks.org。它在缓冲输出的方式上是perl(行与块(。一旦我设置了"$|= 1;" 在我的Perl脚本中,我从PowerShell本身和PowerShell的文件重定向中得到了预期的结果。这是那些可能遇到此问题的人的网站,就像我的情况一样,集成旧脚本。

http://www.perlmonks.org/?node_id=305801 "通过设置 $|正如匿名僧侣所指出的,你强制在每次写入后刷新输出。 - 直接引用本网站,解决了我的问题。

最新更新