如何在Ruby中运行支持交互的命令,但也允许访问其输出?

时间:2017-07-07 16:49:52

标签: ruby

目前我正在运行这样的命令:

system("bundle exec rspec spec")

这很棒,因为它还支持互动,这意味着它允许我通过byebugbinding.pry进行互动。但是,我还希望获得system调用的输出,这是不可能的。退出代码对我来说没用 - 我只需要输出命令。

如何实现与system相同的功能,还可以访问其输出?我尝试过反叛但它不支持交互。

1 个答案:

答案 0 :(得分:0)

您可以使用Open3.capture

require 'open3'
stdout, stderr, status = Open3.capture3('bundle exec rspec spec')

基于Open3.popen3

require 'open3'
require 'byebug'
Open3.popen3('ls -la .') do |stdin, stdout, stderr, wait_thr|
  byebug
end