<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hola a todverna, os, permitdme soltar aqui una duda a ver si hay
      suerte.</p>
    <p>Hacemos un software en python (desktop app, tkinter, python3.X)
      que sirve para definir workflows. SI alguien conoce Knime,
      Taverna, puede darse una idea.</p>
    <p><br>
    </p>
    <p>EL caso es que el principal proceso de la GUI... en un momento
      dado acaba invocando POpen, para lanzar un nuevo proceso
      "separado" del de la GUI. Asi al cerrar la GUI, sigue corriendo.</p>
    <p>Hasta aqui todo bien. El código que lo hace es:</p>
    <pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'Fira Code Light',monospace;font-size:10.5pt;"><span style="color:#cc7832;">def </span><span style="color:#ffc66d;">_run</span>(command<span style="color:#cc7832;">, </span>wait<span style="color:#cc7832;">, </span>stdin=<span style="color:#cc7832;">None, </span>stdout=<span style="color:#cc7832;">None, </span>stderr=<span style="color:#cc7832;">None</span>):
    <span style="color:#629755;font-style:italic;">""" Execute a command in a subprocess and return the pid. """
</span><span style="color:#629755;font-style:italic;">    </span>gcmd = greenStr(command)
    <span style="color:#8888c6;">print</span>(<span style="color:#6a8759;">"** Running command: '%s'" </span>% gcmd)
    p = Popen(command<span style="color:#cc7832;">, </span><span style="color:#aa4926;">shell</span>=<span style="color:#cc7832;">True, </span><span style="color:#aa4926;">stdout</span>=stdout<span style="color:#cc7832;">, </span><span style="color:#aa4926;">stderr</span>=stderr)
    jobId = p.pid
    <span style="color:#cc7832;">if </span>wait:
        p.wait()

    <span style="color:#cc7832;">return </span>jobId
</pre>
    <p><br>
    </p>
    <p>Por lo tanto:</p>
    <p>1.- proceso GUI lanza</p>
    <p>2.- proceso 2 (separado)</p>
    <p><br>
    </p>
    <p>En algun caso, "proceso2", lanza tambien procesos, de la misma
      manera que lo hace la GUI, llamando al mismo código. Sin embargo,
      por algun motivo, los nuevos procesos no quedan separados:</p>
    <p><br>
    </p>
    <p>2.- proceso 2 (separado de GUI) lanza</p>
    <p>3.- proceso 3 (no separado de 2)<br>
    </p>
    <p><br>
    </p>
    <p>Es una simplificación de lo que pasa poro creo que es mejor
      simplificarlo.</p>
    <p>NOTA: Proceso captura sys.stdout y sys.stderr desviandolo a un
      fichero (file handler)</p>
    <p>NOTA: He probado creo que de todo --> start_new_session =
      True, close_fds=True, usar PIPE; DEVULL en stdout, y stderr ...me
      quedé sin ideas.</p>
    <p><br>
    </p>
    <p>Un saludo a todos!<br>
    </p>
    <div class="moz-signature">-- <br>
      Pablo Conesa - <strong>Madrid <a href="http://scipion.i2pc.es">Scipion</a>
        team</strong></div>
  </body>
</html>