【问题标题】:Something like exec() to return a value in Perl?像 exec() 这样的东西在 Perl 中返回一个值?
【发布时间】:2011-11-02 08:21:47
【问题描述】:

我的印象(可能是错误的)Perl 中的“exec”函数没有返回值(我的印象是它只是运行命令)。情况是一个 Perl 脚本正在服务器上运行,我需要调用这个脚本来运行 Linux 框内的命令,但也 return 结果。如何做到这一点?

【问题讨论】:

  • exec 根本不返回。你指的是system吗?你要子进程的返回状态,还是输出?
  • Nitpick: exec 可以在某些失败情况下返回,例如找不到可执行文件或无法执行。
  • 说真的,在你发帖之前看看perldoc -f exec 有多难?当然,您完全有权发布此内容,我实际上会支持正确的答案,但我肯定不想与根本无法让自己真正阅读任何文档的人一起工作。

标签: linux perl exec


【解决方案1】:

如果“返回结果”是指返回命令的 STDOUT,您需要的是反引号或qx()。例如:

my $result = qx(echo foo);
# or
my $result2 = `echo foo`;

请注意,不会返回给 STDERR 的消息。

如果你的意思是程序的退出状态,使用 system:

my $status = system("echo foo");
# or
my $status2 = system("/bin/echo", "foo", "bar");

【讨论】:

  • 谢谢,但我在这里做错了什么--------> ... my $result = qx(echo ping -c 4 www.google.com);返回$结果; }
  • @JohnR 该命令应该与您在 shell 中输入的完全一样。我怀疑你的意思是qx(ping -c 4 www.google.com)
  • 感谢您的回复。我不知道 Perl。
  • @JohnR 现在你知道得更多了。 =)
【解决方案2】:

exec() 不仅不返回值,而且根本不返回

perldoc -f exec

exec 函数执行系统命令并且永不返回 如果您希望它返回,请使用 system 而不是 exec。

但我很确定你不想要 system() 的返回值, 你似乎想要命令的输出,所以:

perldoc -f system

这不是你想用来捕捉的 命令的输出,因为你应该只使用反引号或 qx//,如 perlop/"STRING" 中所述。

【讨论】:

    【解决方案3】:

    运行程序并保存其结果的常用 perl 方法是 backticks:

    my $foo = `ls`;
    

    【讨论】:

      【解决方案4】:

      来自文档:http://perldoc.perl.org/functions/system.html

      我一般用这个:

      if(system(@args) != 0)
      {
      if ($? == -1) {
              print "failed to execute: $!\n";
          }
          elsif ($? & 127) {
              printf "child died with signal %d, %s coredump\n",
                  ($? & 127),  ($? & 128) ? 'with' : 'without';
          }
          else {
              printf "child exited with value %d\n", $? >> 8;
          }
      }
      

      【讨论】:

        【解决方案5】:

        捕获标准输出:

        my $dir = `pwd`;
        my $dir = qx/pwd/;
        

        捕获返回状态:

        my $rc = system('pwd');
        

        Perldocs Capture STDERR and STDOUT:

        my $output = `cmd 2>&1`;
        

        查看链接以获取其他方法来捕获一个输出流,而不是另一个

        【讨论】:

        • "我的系统('pwd');"??我猜你的意思是“我的 $rc = system('pwd');” :)
        【解决方案6】:

        使用反引号

        my $var = `shell command`;
        

        在 perl 中,您可以执行 shell 命令并返回任何输出。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-02
          • 1970-01-01
          • 2019-08-17
          • 2011-01-24
          • 2023-03-06
          • 2013-07-30
          • 2014-09-29
          • 1970-01-01
          相关资源
          最近更新 更多