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

时间:2014-01-23 01:27:52

标签: ruby shell stdout exit-code

这是关于ruby system command check exit code的后续问题。我想运行命令,以获取其输出以及退出代码。目前我在代码中使用的是:

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

但这仅捕获输出,

rv = system(cmd)

仅捕获退出代码。如何实现两者?

3 个答案:

答案 0 :(得分:6)

检查$?.exitstatus是否有退出代码。

有关详细信息,请参阅http://www.ruby-doc.org/core-2.1.0/Process/Status.html

答案 1 :(得分:3)

反引号将捕获命令的输出。例如,要将输出存储在 rv 变量中:

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

您可以从内置的 $?变量或exit status对象中查询流程的Process::Status。例如,要获取最后一个反引号命令的退出状态:

$?.exitstatus
#=> 64

答案 2 :(得分:1)

  

$?访问上次系统执行命令的状态   使用反引号,system()或%{}。然后,您可以访问exitstatus   和pid属性。

Source

因此,您可以执行rv = system(cmd),并执行status = $?.exitstatus