ruby popen3

¿Cómo recuperar el estado de salida de ruby Open3.popen3()?



(3)

La respuesta concisa es usar el 4to parámetro de open3: wait_thr

  • obtener si se indica algún error: wait_thr.value.success?
  • obtener el nivel de error real: wait_thr.value.exitstatus

Muestra:

Open3.popen3(command) do |stdin, stdout, stderr, wait_thr| return_value = wait_thr.value end puts "Error level was: #{return_value.exitstatus}" unless return_value.success?

Parece que estoy atascado tratando de recuperar el estado de salida de un comando de shell que se inició desde el método Open3.popen3 () de ruby.

Aquí está mi código:

require ''open3'' stdin, stdout, stderr = Open3.popen3(''ls'')

¿Cuando ahora intento acceder a $? todavía es nil

¿Es posible recuperar el estado de salida después de todo?

Notas:
- ls no es el comando que estoy tratando de usar en mi script. Acabo de usar esto para dar un ejemplo. Mi script es un poco más complejo y contiene información del usuario, por lo que necesito la funcionalidad de limpieza de Open3.
- También probé la variante de bloque de popen3, pero tampoco tuve éxito con eso.


Todo lo que necesita (salida estándar, error y código de salida) en tres líneas:

require ''open3'' stdin, stdout, stderr, wait_thr = Open3.popen3("sleep 5; ls") puts "#{stdout.read} #{stderr.read} #{wait_thr.value.exitstatus}"