Доступ Ruby может произвести от команд оболочки, как это появляется?

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

12
задан Ciryon 29 April 2010 в 22:47
поделиться

2 ответа

Вы ищете каналов . Вот пример:

# 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
21
ответ дан 2 December 2019 в 07:20
поделиться

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

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

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

@Marcel понял.

0
ответ дан 2 December 2019 в 07:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: