从Ruby运行shell命令:在显示输出时捕获输出?

nev*_*ame 5 ruby bash

我有个问题.

我想从另一个ruby脚本运行ruby脚本并捕获它的输出信息,同时让它输出到屏幕.

跑步者

#!/usr/bin/env ruby
print "Enter your password: "
password = gets.chomp
puts "Here is your password: #{password}"
Run Code Online (Sandbox Code Playgroud)

我运行的脚本文件:

start.rb

output = `runner`
puts output.match(/Here is your (password: .*)/).captures[0].to_s
Run Code Online (Sandbox Code Playgroud)

如你所见,这是一个问题.

在start.rb的第一行,屏幕为空.

我在跑步者中看不到"输入你的密码:".

有没有办法在跑步者脚本完成之前显示它的输出,并且仍然让我将它捕获到一个字符串,以便我可以处理信息,例如.在这个例子中使用匹配?

mač*_*ček 7

runner.rb

STDOUT.print "Enter your password: "
password = gets.chomp
puts "Here is your password: #{password}"
Run Code Online (Sandbox Code Playgroud)

注意 STDOUT.print

start.rb

require "stringio"

buffer = StringIO.new
$stdout = buffer

require "runner"

$stdout = STDOUT
buffer.rewind

puts buffer.read.match(/Here is your (password: .*)/).captures[0].to_s
Run Code Online (Sandbox Code Playgroud)

产量

Enter your password: hello
password: hello
Run Code Online (Sandbox Code Playgroud)

阅读更多...

我最近在这里写了一篇文章:使用Ruby输出缓冲