diff --git a/lib/cc/engine/analyzers/command_line_runner.rb b/lib/cc/engine/analyzers/command_line_runner.rb index 320dd728..66e09aae 100644 --- a/lib/cc/engine/analyzers/command_line_runner.rb +++ b/lib/cc/engine/analyzers/command_line_runner.rb @@ -14,23 +14,11 @@ def initialize(command, timeout = DEFAULT_TIMEOUT) def run(input) Timeout.timeout(timeout) do - Open3.popen3 command, "r+" do |stdin, stdout, stderr, wait_thr| - stdin.puts input - stdin.close - - exit_code = wait_thr.value - - output = stdout.gets - stdout.close - - err_output = stderr.gets - stderr.close - - if 0 == exit_code - yield output - else - raise ::CC::Engine::Analyzers::ParserError, "Python parser exited with code #{exit_code}:\n#{err_output}" - end + out, err, status = Open3.capture3(command, stdin_data: input) + if status.success? + yield out + else + raise ::CC::Engine::Analyzers::ParserError, "`#{command}` exited with code #{status.exitstatus}:\n#{err}" end end end