ruby - 从 Ruby 运行命令显示和捕获输出

标签 ruby

是否有某种方法可以从 Ruby 运行(shell)命令显示并捕获输出?也许在一些 gem 的帮助下?

我所说的显示的意思不是在最后打印它,而是在它出现时打印出来,这样用户就可以在运行缓慢的命令时得到反馈。

最佳答案

你可以像这样运行系统调用:

`sleep --help`

或者像这样

system "sleep --help"

或者

%x{ sleep --help }

如果是system,它将打印输出并返回truenil,其他两种方法将返回输出

附言哦。它是关于实时显示。

所以。你可以使用这样的东西:

system("ruby", "-e 100.times{|i| p i; sleep 1}", out: $stdout, err: :out)

实时打印数据并将其存储在变量中:

output = []
r, io = IO.pipe
fork do
  system("ruby", "-e 3.times{|i| p i; sleep 1}", out: io, err: :out)
end
io.close
r.each_line{|l| puts l; output << l.chomp}
#=> 0
#=> 1
#=> 2
p output
#=> ['0', '1', '2']

或者使用popen

output = []
IO.popen("ruby -e '3.times{|i| p i; sleep 1}'").each do |line|
  p line.chomp
  output << line.chomp
end
#=> '0'
#=> '1'
#=> '2'
p output
#=> ['0', '1', '2']

关于ruby - 从 Ruby 运行命令显示和捕获输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10224481/

相关文章:

ruby - 使用正则表达式作为条件循环(直到)

ruby - 使用watir执行ruby脚本时报错: unknown error: DevToolsActivePort file doesn't exist,

ruby - 在 Ruby 中覆盖方法调用?

ruby-on-rails - 对数组进行分组并求和

ruby - 在 Ruby 中设置测试套件

ruby - 如何更改 Ruby 中类构造函数的返回值?

Ruby 在 semaphore.synchronize block 中返回

html - 使用 CGI 运行脚本

ruby-on-rails - CanCan 在应该阻止访问时却没有阻止

ruby-on-rails - Ruby无一异常(exception)地获得回溯