Книга: Программирование на языке Ruby
14.1.4. Стандартный ввод и вывод
14.1.4. Стандартный ввод и вывод
В главе 10 мы видели, как работают методы IO.popen
и IO.pipe
, но существует еще небольшая библиотека, которая иногда бывает удобна.
В библиотеке Open3.rb
есть метод popen3
, который возвращает массив из трех объектов IO
. Они соответствуют стандартному вводу, стандартному выводу и стандартному выводу для ошибок того процесса, который был запущен методом popen3
. Вот пример:
require "open3"
filenames = %w[ file1 file2 this that another one_more ]
inp, out, err = Open3.popen3("xargs", "ls", "-l")
filenames.each { |f| inp.puts f } # Писать в stdin процесса.
inp.close # Закрывать обязательно!
output = out.readlines # Читать из stdout.
errout = err.readlines # Читать также из stderr.
puts "Послано #{filenames.size} строк входных данных."
puts "Получено #{output.size} строк из stdout"
puts "и #{errout.size} строк из stderr."
В этом искусственном примере мы выполняем команду ls -l
для каждого из заданных имен файлов и по отдельности перехватываем стандартный вывод и стандартный вывод для ошибок. Отметим, что вызов close
необходим, чтобы порожденный процесс увидел конец файла. Также отметим, что в библиотеке Open3 используется метод fork
, не реализованный на платформе Windows; для этой платформы придется пользоваться библиотекой win32-open3
(ее написали и поддерживают Дэниэль Бергер (Daniel Berger) и Парк Хисоб (Park Heesob)). См. также раздел 14.3.
- 4.4. Ввод и вывод
- Глава 7. Ввод и вывод
- Перенаправление ввода
- Вывод на экран текстовых строк
- 14.1.2. Перехват вывода программы
- ГЛАВА 5 ВВОД И ВЫВОД
- 2.1.4. Стандартный ввод-вывод
- 7.1 Стандартный ввод-вывод
- Пример: функция str_echo, использующая стандартный ввод-вывод
- 14.8. Сокеты и стандартный ввод-вывод
- Стандартные потоки: stdin, stdout, stdeir, stdaux, stdprn.
- 9.5. Пример: двусторонние каналы в gawk