【问题标题】:how to capture the exit status of capture calling another perl script within a perl script and if it fails it should die如何捕获在 perl 脚本中调用另一个 perl 脚本的捕获的退出状态,如果失败,它应该死
【发布时间】:2019-03-22 01:11:45
【问题描述】:

我刚刚开始在安全 CRT 上使用 Perl 5.26,并且我编写了一个 Perl 脚本来捕获多个 Perl 脚本的调用。

 my @secondCommand = capture("perl clientquery.pl -r $cid -l test.log -is $sqlFile");

我想知道如何捕获每个捕获调用的退出状态,如果失败了如何使原始脚本终止。

【问题讨论】:

  • capture() 函数从何而来?也许它已经在某处返回退出状态?或者它可能设置$?
  • 你到底是什么意思?你能说得更具体点吗?
  • 使用 IPC::System::Simple qw(system capture);
  • 如果命令失败或返回非零退出状态(这是“简单”部分),默认情况下从 IPC::System::Simple 捕获将已经终止。您可以指定它不会因某些退出代码(或任何退出代码)而死,请参阅the docs

标签: perl unix exit secure-crt


【解决方案1】:

IPC::System::Simple provides $EXITVAL,捕获通过capture和其他函数运行的命令的退出代码。

IPC::System::Simple 执行的任何命令的退出值都可以 始终从$IPC::System::Simple::EXITVAL 变量中检索:

这在检查捕获结果时特别有用, 从命令返回捕获的文本。

use IPC::System::Simple qw(capture $EXITVAL EXIT_ANY);

my @enemies_defeated = capture(EXIT_ANY, "defeat_evil", "/dev/mordor");

print "Program exited with value $EXITVAL\n";

如果命令没有正常退出,$EXITVAL 将设置为 -1(例如, 被信号终止)或没有开始。在这种情况下 也会抛出异常。

【讨论】:

  • 小伙子,谢谢!
猜你喜欢
  • 2013-08-28
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
相关资源
最近更新 更多