我有个问题.
我想从另一个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)
我运行的脚本文件:
output = `runner`
puts output.match(/Here is your (password: .*)/).captures[0].to_s
Run Code Online (Sandbox Code Playgroud)
如你所见,这是一个问题.
在start.rb的第一行,屏幕为空.
我在跑步者中看不到"输入你的密码:".
有没有办法在跑步者脚本完成之前显示它的输出,并且仍然让我将它捕获到一个字符串,以便我可以处理信息,例如.在这个例子中使用匹配?
STDOUT.print "Enter your password: "
password = gets.chomp
puts "Here is your password: #{password}"
Run Code Online (Sandbox Code Playgroud)
注意 STDOUT.print
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输出缓冲