20.8. Sterowanie zewnętrznym procesem za pomocą metody popen

Problem

Chcemy uruchomić zewnętrzne polecenie w formie podprocesu. Chcemy przekazać pewne dane do jego standardowego strumienia wejściowego i odczytać dane ze standardowego strumienia wyjściowego.

Rozwiązanie

Jeśli nie interesuje nas standardowe wejście polecenia, możemy skorzystać z konstrukcji %x{}. Jej użycie powoduje uruchomienie ciągu znaków jako polecenia w podrzędnej powłoce systemu operacyjnego i zwraca standardowy strumień wyjściowy tego polecenia w postaci ciągu znaków.

%x{whoami}                                      # => "leonardr\n"
puts %x{ls -a empty_dir}
# .
# ..

Aby przekazać dane do standardowego wejścia podprocesu, można skorzystać z bloku kodowego, który należy przekazać do metody IO.popen ...

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.