如何从ruby Open3.popen3()中检索退出状态



我似乎一直在试图检索从ruby的Open3.popen3()-方法.启动的shell命令的退出状态

这是我的代码:

require 'open3'
stdin, stdout, stderr = Open3.popen3('ls')

当我现在尝试访问$?时,它仍然是nil

是否可以检索退出状态?

备注:
-ls不是我试图在脚本中使用的命令。我只是举了个例子。我的脚本有点复杂,并且包含用户输入,这就是为什么我需要Open3的清理功能。
-我也尝试过popen3的block变体,但也没有成功。

简洁的答案是使用open3:wait_thr 的第四个参数

  • 获取是否指示错误:wait_thr.value.success?
  • 获得实际错误级别:wait_thr.value.exitstatus

样品:

Open3.popen3(command) do |stdin, stdout, stderr, wait_thr|
  return_value = wait_thr.value
end
puts "Error level was: #{return_value.exitstatus}" unless return_value.success?

popen3产生/返回四个参数,stdinstdoutstderrwait_thrwait_thr包含一个返回命令退出状态的方法wait_thr.value(事实上,根据文档,它是一个Process::Status对象)。还可以看看http://www.ruby-doc.org/stdlib-1.9.3/libdoc/open3/rdoc/Open3.html#method-c-popen3

三行中的所有内容(标准输出、错误和退出代码):

require 'open3'
stdin, stdout, stderr, wait_thr = Open3.popen3("sleep 5; ls")
puts "#{stdout.read} #{stderr.read} #{wait_thr.value.exitstatus}"

相关内容

  • 没有找到相关文章

最新更新