Может ли Ruby получить доступ к выводу команд оболочки, как он появляется? - PullRequest
12 голосов
/ 30 апреля 2010

Мой сценарий Ruby выполняет команду оболочки и анализирует выходные данные. Однако кажется, что команда сначала выполняется, а выходные данные сохраняются в массиве. Я хотел бы иметь возможность получить доступ к выходным линиям в режиме реального времени так же, как они напечатаны. Я играл с нитями, но не получил его на работу. Есть предложения?

Ответы [ 2 ]

21 голосов
/ 30 апреля 2010

Вы ищете трубы . Вот пример:

# This example runs the netstat command via a pipe
# and processes the data in Ruby as it come back

pipe = IO.popen("netstat 3")
while (line = pipe.gets)
  print line
  print "and"
end
0 голосов
/ 30 апреля 2010

Когда вы вызываете методы / функции для запуска команд system / shell, ваш интерпретатор порождает другой процесс для его запуска и ожидает его завершения, а затем выдает результат.

Даже если вы используете потоки, единственное, что вы могли бы сделать, - это не дать программе зависнуть во время выполнения команды, но вы все равно не получите вывод до ее завершения.

Я думаю, что вы можете сделать это с помощью труб, но я не знаю, как.

@ Марсель понял.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...