我正在编写一个PowerShell脚本,它必须调用旧的Perl脚本,并将这个长时间运行的Perl脚本的输出实时显示给PowerShell,就像我通常在Windows命令提示符或交互式Putty SSH会话中查看一样。我的要求是将Perl脚本的输出实时写入日志文件,并实时将结果显示给PowerShell。
我的问题是,一旦Perl脚本完成运行,所有结果将返回到PowerShell或我的日志文件。
以下是我的PowerShell代码的简化示例。
#Test.ps1
$env:Path = "C:\Dev\perl583\bin;" + $env:Path
$WORKING_PATH="C:\Dev\scripts"
perl $WORKING_PATH\LegacyScript.pl *>> C:\Dev\results\realtime_output.txt
exit $LASTEXITCODE
以下是一个示例Perl脚本,它模拟PowerShell脚本调用的长时间运行操作:
#LegacyScript.pl
for( $a = 1; $a < 6; $a = $a + 1 ){
print "New value of a: $a\n";
sleep(10)
}
答案 0 :(得分:3)
经过一天的研究后,我想我找到了PerlMonks.org提供的自己问题的答案。它是缓冲输出的方式(行与块)。一旦我设置“$ | = 1;”在我的Perl脚本中,我从PowerShell本身和PowerShell的文件重定向中获得了预期的结果。以下是可能遇到此问题的站点,这些问题在我的案例中集成了遗留脚本。
http://www.perlmonks.org/?node_id=305801 “通过设置匿名Monk指示的$ |,可以在每次写入后强制刷新输出。” - 直接引用本网站解决了我的问题。