ruby popen3 - como escrever repetidamente para stdin e ler stdout sem reabrir o processo?

estou usandoOpen3épopen3 método para iniciar um processo que funciona em um console /REPL moda para aceitar repetidamente a entrada e retornar a saída.

Eu sou capaz de abrir o processo, enviar entrada e receber a saída muito bem, com código como este:

Open3.popen3("console_REPL_process") do |stdin, stdout, stderr, wait_thr|
    stdin.puts "a string of input"
    stdin.close_write
    stdout.each_line { |line| puts line } #successfully prints all the output
end

Eu quero fazer isso várias vezes seguidas, sem reabrir o processo, pois leva muito tempo para iniciar.

Eu sei que tenho que fechar o stdin para que o stdout retorne .. mas o que eu não sei é,como faço para reabrir o stdin para poder escrever mais informações?

Idealmente, quero fazer algo assim:

Open3.popen3("console_REPL_process") do |stdin, stdout, stderr, wait_thr|
    stdin.puts "a string of input"
    stdin.close_write
    stdout.each_line { |line| puts line }

    stdin.reopen_somehow()

    stdin.puts "another string of input"
    stdin.close_write
    stdout.each_line { |line| puts line }
    # etc..
end
solução

Graças à resposta do pmoo, consegui criar uma solução usandoPTY eexpect, esperando a string de prompt que o processo retornará sempre que estiver pronto para mais entradas, como:

PTY.spawn("console_REPL_process") do |output, input|
    output.expect("prompt >") do |result|
      input.puts "string of input"
    end
    output.expect("prompt >") do |result|
      puts result
      input.puts "another string of input"
    end
    output.expect("prompt >") do |result|
      puts result
      input.puts "a third string of input"
    end
    # and so forth
end

questionAnswers(1)

yourAnswerToTheQuestion