Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby中运行一个既支持交互又允许访问其输出的命令?_Ruby - Fatal编程技术网

如何在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
示例中的参数命名搞砸了,现在已经解决了。