【问题标题】:How to Show and Log a Perl Scripts Output in Real Time when Invoked from PowerShell从 PowerShell 调用时如何实时显示和记录 Perl 脚本输出
【发布时间】: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


【解决方案1】:

经过一天的研究,我想我找到了 PerlMonks.org 提供的问题的答案。它在缓冲输出(行与块)的方式上是 perl。一旦我设置“$| = 1;”在我的 Perl 脚本中,我从 PowerShell 本身和 PowerShell 的文件重定向中得到了预期的结果。这里是那些可能在集成遗留脚本时遇到这个问题的人的网站。

http://www.perlmonks.org/?node_id=305801 “通过将 $| 设置为 Anonymous Monk 指示,您可以强制在每次写入后刷新输出。” - 这个网站的直接报价解决了我的问题。

【讨论】:

  • 现在我从 Windows 获取 Perl 在 Perl 脚本执行期间增量输出,这对我之前的问题的分拆是我在 Linux 中遇到了同样的问题。目前,我正在尝试从 WIndows 服务器执行 Invoke-SshCommand 以在 Linux 机器上运行我的 perl 脚本。与之前一样,即使在更新 Perl 脚本之后,PowerShell 也不会得到任何输出,直到 Perl 脚本完成并且 Invoke-SshCommand cmdlet 返回之后。如果有 SSH.Net 经验的人解决了这个问题,我们将不胜感激。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 2010-12-09
相关资源
最近更新 更多