如何在Ruby中运行一个既支持交互又允许访问其输出的命令?
目前我运行的命令如下:如何在Ruby中运行一个既支持交互又允许访问其输出的命令?,ruby,Ruby,目前我运行的命令如下: system("bundle exec rspec spec") 这很好,因为它还支持交互,这意味着它允许我通过byebug或binding.pry进行交互。但是,我还想获得系统调用的输出,这是不可能的。而且,退出代码对我来说是无用的——我只需要命令的输出 我如何实现与系统相同的功能,但同时也可以访问其输出?我尝试过backticks,但它不支持交互 您可以使用Open3.capture: require 'open3' stdout, stderr, status =
system("bundle exec rspec spec")
这很好,因为它还支持交互,这意味着它允许我通过byebug
或binding.pry进行交互。但是,我还想获得系统
调用的输出,这是不可能的。而且,退出代码对我来说是无用的——我只需要命令的输出
我如何实现与系统
相同的功能,但同时也可以访问其输出?我尝试过backticks,但它不支持交互 您可以使用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
查看
Kernel#system
的文档,或者您可以将输入和输出流指定为方法的一部分本身不确定我是否做错了什么,但是如果我有byebug
或绑定,则此命令将挂起。请撬动
以停止执行<代码>系统将允许我检查代码。我怎样才能达到同样的效果呢?好的,我不知道为什么命令会挂起。但是我已经把popen3
示例中的参数命名搞砸了,现在已经解决了。