【发布时间】:2013-12-04 14:24:02
【问题描述】:
我需要在 ruby 脚本中创建一个程序。 这个程序会定期打印一个 JSON 并且在主脚本中我需要拦截它并进行计算。 谢谢
类似这样的:
MAIN:
Spawn a process
//This generates stdout periodically
//End call
Intercept its stdout
//REST of the code
怎么做? 我需要使用事件机器吗?有点?
我用这段代码澄清一下
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
我只需要在程序使用 popen 打开时 spwan 一次,并在每次打印 stdout 时获取 stdout。
【问题讨论】:
-
你的问题是?