Мне нужно развернуть программу в рубиновом скрипте. Эта программа периодически печатает JSON, и в главном скрипте мне нужно перехватить это и сделать расчет. БлагодаряSpawn process thats loops и get stdout постоянно в ruby
Что-то вроде этого:
MAIN:
Spawn a process
//This generates stdout periodically
//End call
Intercept its stdout
//REST of the code
Как? Мне нужно использовать eventmachine? В некотором роде?
Я разъясняю с этим кодом
timer = EventMachine.add_periodic_timer POLLING_INTERVAL do
if memcached_is_running
ld 'reading from device'
begin
IO.popen("HostlinkPollerLight -p #{SERIAL_PORT} -v #{SERIAL_BAUDRATE} -r #{MODEL_CONFIG} 2> /dev/null") do |payload|
$_data = JSON.parse payload.readlines[0]
end
if $data['success']
memcache.set(MEMCACHE_DATA_KEY, _to_json($data[ 'result' ], _mapping))
timer.interval = POLLING_INTERVAL
else
log_this " read fault: error_code #{$data['fault']}"
timer.interval = FAULT_INTERVAL
end
rescue Errno::ENOENT
log_this 'Unable to read output'
rescue JSON::ParserError
log_this 'Malformed data'
end
else
timer.interval = FAULT_INTERVAL
system("on_red_led.sh 2")
end
log_this "elapsed time: #{Time.now.to_f - delta}"
ld "## end read: #{counter}"
counter += 1
end
мне нужно spwan только один раз, когда программа открыта с POPEN и получить стандартный вывод каждый раз, когда его печать стандартный вывод.
и ваш вопрос? – fotanus