【问题标题】:Perl - Master script calling sub-scripts and return statusPerl - 主脚本调用子脚本并返回状态
【发布时间】:2011-01-27 21:40:52
【问题描述】:

这是我想在 Perl 中完成的设计:

一个主脚本调用多个子脚本。主脚本控制每个子脚本按特定顺序的调用,并记录每个子脚本的输出,以决定是否不调用下一个脚本。

目前,我有一个使用 system() 调用来调用子脚本的主脚本,但我无法让子脚本将状态回传给主脚本。

不想使用子函数,真想把每个子脚本代码分开。

为了更清楚地说明问题: 子脚本应该决定向主脚本报告什么。例如:当子脚本在数据库中找到一个字符串值时,子脚本发送代码 1,当子字符串没有找到它要查找的文件时,它发送代码 2,当一切正常时发送代码 0。

【问题讨论】:

  • 虽然不是问题的答案,但您可能需要在此处考虑您的实施。如果您将模块用于不同的功能,您可以做同样的事情,但更健壮,内存更少,并且没有系统调用。您可以让每个模块都具有您需要的功能或行为。对于那些“需要保持独立的脚本”,您可以在该模块周围有一个包装脚本来调用模块的方法。然后,对于这个“主”脚本,您只需使用所有模块并调用每个模块中的函数,将结果作为变量而不是返回值传回。
  • 是的,最终我肯定想走那条路,有什么好的资源可以指点我了解更多关于 perl 中“模块”的信息吗?

标签: perl system status


【解决方案1】:

您不能为此使用exit 代码吗?

my $code = system( 'perl', '-e', 'exit 2;' ) >> 8; # $code = 2
say "\$code=$code";

退出代码可以是255个不同的值。

【讨论】:

    【解决方案2】:

    您可以使用反引号语法执行和捕获系统命令的输出。

    # get result as scalar
    $result = `ls -lA`;
    
    # get the result as an array, each line of output is a separate array entry
    @result = `ls -lA`;
    

    每当你使用反引号语法时,命令的退出状态也会存储在自动变量$?

    然后您可以让主脚本使用您需要的任何逻辑来决定输出是否良好。

    【讨论】:

    • 使用反引号捕获子脚本打印的所有内容。我正在寻找的基本上是发送退出状态,除了退出状态可以是在子脚本中设置的超过 2 个不同的值
    • 使用$? 变量来捕捉上面的退出状态。然后你可以丢弃输出。这需要下标使用 Perl 的 exit() 发送真实状态。
    【解决方案3】:

    查看 Axeman 的回答,您可以使用 IPC::System::Simple 模块:

    #!/usr/bin/perl
    use warnings;
    use 5.012;
    use IPC::System::Simple qw(system $EXITVAL EXIT_ANY);
    
    
    system( [2], 'perl', '-e', 'exit 2' );
    say "EXITVAL: $EXITVAL";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 2011-11-26
      • 2012-11-18
      相关资源
      最近更新 更多