$stdout
имеет некоторые особые ограничения в рубине. По умолчанию он открыт только для чтения (очевидно), поэтому для поиска / чтения строк, которые вы написали, вы должны заменить его как File
. Этого будет достаточно:
$stdout = File.new("stdout", "w+")
puts "some string"
Kernel#puts
будет использовать $stdout
по умолчанию, так что это настроит вас идеально. Вам нужно выполнить проверку, это может быть немного сложно, но вот один из способов приблизиться к нему.
$stdout = File.new("stdout", "w+")
puts "some string"
old = $stdout
$stdout = IO.try_convert(STDOUT)
old.rewind
old.lines.each do |line|
puts 'contains requested data' if line == "some string\n"
end
Несколько вещей, которые стоит отметить при сравнении, автоматически ставит места \n
в конце вашей строки. Чтобы избежать этого \n
, чтобы он совпадал с предыдущим вводом, вам необходимо поместить его в кавычки ""
.