jam-cloud/ruby/lib/jam_ruby/jmep_manager.rb

56 lines
1.4 KiB
Ruby

require 'json'
require 'tempfile'
require 'open3'
require 'fileutils'
require 'open-uri'
module JamRuby
# Interact with external python tools to create jmep json
class JmepManager
@@log = Logging.logger[JmepManager]
class << self
def execute(jmep_text)
json = nil
if jmep_text.blank?
return nil
end
py_root = APP_CONFIG.jmep_dir
Dir.mktmpdir do |tmp_dir|
output_json = File.join(tmp_dir, "jmep.json")
input_text = File.join(tmp_dir, "jmep.txt")
# put JMEP text into input file
File.open(input_text, 'w') { |file| file.write(jmep_text) }
py_file = File.join(py_root, "jmepgen.py")
@@log.info "Executing python source in #{py_file}, outputting to #{output_json})"
# From http://stackoverflow.com/questions/690151/getting-output-of-system-calls-in-ruby/5970819#5970819:
cli = "python #{py_file} -i '#{input_text}' -o '#{output_json}'"
Open3.popen3(cli) do |stdin, stdout, stderr, wait_thr|
pid = wait_thr.pid
exit_status = wait_thr.value
err = stderr.read(1000)
out = stdout.read(1000)
raise ArgumentError, "#{out} #{err}" if exit_status != 0
json = File.read(output_json)
end
end
json
end
end
end
end