【发布时间】:2018-02-06 06:56:46
【问题描述】:
我正在编写一个 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)
}
【问题讨论】:
-
这允许您制作一个脚本 - 然后您应该能够直接调用脚本而无需重定向输出:stackoverflow.com/questions/1215260/…
-
谢谢。即使有成绩单,在 perl 脚本执行完成之前,输出似乎仍然没有被转储。
-
啊,我误解了你的问题,我认为你在两个(“或我的日志文件”->“和我的日志文件”)中都需要它。我对 power shell 的了解还不够,无法帮助你——但我不明白这与 perl 有什么关系,真的。
-
实际上,经过一天的研究,我想我找到了 PerlMonks.org 提供的问题的答案。它在缓冲输出(行与块)的方式上是 perl。一旦我设置“$| = 1;”在我的 Perl 脚本中,我从 PowerShell 本身和 PowerShell 的文件重定向中得到了预期的结果。这里是那些可能遇到这个问题的人的站点,就像我的例子一样,集成遗留脚本。 perlmonks.org/?node_id=305801
-
我的立场是正确的,做得好:)
标签: perl powershell