How can an external command return both its output and its exit status to Ruby?

This is a follow up question regarding ruby system command check exit code. I want to run command such that to get its output as well as exit code. Currently what I used in the code is:

rv = `#{cmd} 2>&1`

But this only captures output, and

rv = system(cmd)

only captures the exit code. How to achieve both?


Check $?.exitstatus for the exit code.

For more info, see http://www.ruby-doc.org/core-2.1.0/Process/Status.html


Backticks will capture the output from your command. For example, to store the output in the rv variable:

rv = `echo Error: EX_USAGE; exit 64`
#=> "Error: EX_USAGEn"

You can interrogate the exit status of the process from the built-in $? variable or from a Process::Status object. For example, to get the exit status of the last backtick command:

$?.exitstatus
#=> 64

$? accesses the status of the last system executed command if you use the backticks, system() or %{}. You can then access the exitstatus and pid properties.

Source

So you can do rv = system(cmd) , and do status = $?.exitstatus .

链接地址: http://www.djcxy.com/p/25302.html

上一篇: 从Rails应用程序控制器中调用ruby脚本

下一篇: 外部命令如何将其输出和退出状态返回给Ruby?