Я довольно новичок в Ruby и не могу найти способ получения вывода внешней команды. Мне нужно извлечь значения, возвращаемые командой. Теперь у меня есть что-то вроде этого:Извлечение значения из stdout Open3.popen3 через RegEx и сохранение его
stdin, stdout, stderr, wait_thr = Open3.popen3("#{path}/foobar", configfile)
if /exit 0/ =~ wait_thr.value.to_s
runlog.puts("Foobar exited normally.\n")
puts "Test completed."
someoutputvalue = stdout.read("TX.*\s+(\d+)\s+")
puts "Output value: " + someoutputvalue
end
Но я явно не используя правильный метод на стандартный вывод, так как Руби говорит мне, что это не может преобразовать строку в Integer.
Каким будет правильный способ? Я не могу найти нигде в документации методы, доступные для stdout. Использование stout.read
Я использую Ruby 1.9.3.
Update
Чтобы быть совершенно ясно, что я пытаюсь прочитать вывод программы, применять регулярное выражение, и сохранить извлеченное значение в переменную для дальнейшего использования.
Так, например, если «TX» так и так: 28 «Я хотел бы получить только« 28 »(я подтвердил, что регулярное выражение соответствует совпадениям, что мне нужно для соответствия, мне просто интересно, как хранить что извлеченное значение в переменной).
Если вы не хотите общаться с процессом и просто прочитать свой вывод, 'capture3' будет более подходящим (и более простой). –
Что нужно сделать, чтобы читать? Я думал, что единственный аргумент, который вы передали, - это то, как далеко в потоке идти? Может быть, он пытается обрабатывать ваш строковый аргумент как целое число байтов? –
@JoePym аргумент - это XML-файл, используемый foobar для запуска, если это ваш вопрос. – Astaar