Как найти конкретную строку из $ stdout и сохранить весь $ stdout в текстовом файле, если строка найдена с помощью Ruby? - PullRequest
0 голосов
/ 19 февраля 2012

Я хочу найти определенную строку, которая будет там в $ stdout, которую я печатаю на консоли, используя http.set_debug_output ($ stdout). Я хочу найти строку «Access-Control-Allow-Origin: * \ r \ n» из $ stdout и, если найдена строка, хочу сохранить $ stdout в текстовом файле.

1 Ответ

1 голос
/ 19 февраля 2012

$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, чтобы он совпадал с предыдущим вводом, вам необходимо поместить его в кавычки "".

...