My Ruby script запускает команду оболочки и анализирует вывод из нее. Однако, кажется, команда сначала выполняется, а вывод сохраняется в массиве. Я хотел бы иметь доступ к выходным линиям в режиме реального времени так же, как они печатаются. Я играл с нитками, но у меня не получилось работать. Любые предложения?
Может ли доступ к Ruby получить из команд оболочки, когда он появляется?
Ответ 1
Вы ищете трубы. Вот пример:
# 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
Ответ 2
При вызове методов/функций для запуска команд системы/оболочки ваш интерпретатор запускает другой процесс для его запуска и ждет его завершения, затем выдаст вам результат.
Даже если вы используете потоки, единственное, что вы выполнили, это не позволить вашей программе висеть во время выполнения команды, но вы все равно не получите результат до его завершения.
Я думаю, вы можете сделать это с помощью труб, но я не уверен, как это сделать.
@Марсель получил его.