23.1. Pisanie skryptów zarządzających zewnętrznymi programami

Problem

Chcemy automatycznie zarządzać zewnętrznym programem, który oczekuje na dane wprowadzane przez użytkownika na terminalu.

Rozwiązanie

W przypadku programu, który wymaga wprowadzenia pojedynczego łańcucha, można skorzystać z metody IO.popen tak, jak opisano to w „20.8. Sterowanie zewnętrznym procesem za pomocą metody popen”. Poniższa metoda uruchamia polecenie, przesyła ciąg znaków do jego standardowego strumienia wejściowego i zwraca zawartość standardowego strumienia wyjściowego.

def run(command, input='')
  IO.popen(command, 'r+') do |io|
    io.puts input
    io.close_write
    return io.read
  end
end

run 'wc -w', 'Ile wyrazów jest w tym ciągu?'         # => "6\n"

Pokazaną technikę powszechnie ...

Get Ruby. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.