我似乎被困在尝试检索从ruby的Open3.popen3()方法启动的shell命令的退出状态.
这是我的代码:
require 'open3'
stdin, stdout, stderr = Open3.popen3('ls')
Run Code Online (Sandbox Code Playgroud)
当我现在尝试访问$?它仍然是nil
毕竟可以检索退出状态吗?
注意:
- ls不是我试图在我的脚本中使用的命令.我只是用它来举个例子.我的脚本有点复杂并且包含用户输入,这就是我需要Open3的清理功能的原因.
- 我也尝试了popen3的块变体,但也没有成功.
小智 25
简明的回答是使用open3的第4个参数: 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?
Run Code Online (Sandbox Code Playgroud)
ckr*_*use 23
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
| 归档时间: |
|
| 查看次数: |
9750 次 |
| 最近记录: |