我似乎一直在试图检索从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
产生/返回四个参数,stdin
、stdout
、stderr
和wait_thr
。wait_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}"