Se scripts de shell llamados de pitón persisten después de que termine la secuencia de comandos de Python?

StackOverflow https://stackoverflow.com/questions/2240494

  •  19-09-2019
  •  | 
  •  

Pregunta

En el marco de una prueba automatizada, tengo un script en Python que tiene que llamar a dos scripts de shell que se inician dos servidores diferentes que necesitan interactuar después de que termine la secuencia de comandos que llama. (En realidad es un script Jython, pero no estoy seguro de lo que importa en este punto.) ¿Qué puedo hacer para asegurar que los servidores quedan hasta después de que termine la secuencia de comandos de Python?

En este punto se llaman algo como esto:

def runcmd(str, sleep):
    debug('Inside runcmd, executing: ' + str)
    os.chdir("/new/dir/")
    directory = os.getcwd()
    print 'current dir: '+ directory
    os.system(str)

t = threading.Thread(
        target=runcmd,
        args=( cmd, 50,)
    )
¿Fue útil?

Solución

todos

hilos Python morirán con Python. Además, os.system está bloqueando. Pero eso está bien - si el comando que os.system () se ejecuta pone en marcha un nuevo proceso (pero no un proceso hijo), todo estará bien. En Windows, por ejemplo, si el comando se inicia con "iniciar" el "proceso "arranque" d permanecerá después de Python muere.

EDIT: nohup es un equivalente a start en Linux. (Gracias a S. Lott).

Otros consejos

os.system() no vuelve hasta que el proceso se pone en marcha ha terminado. Utilice subprocess o Runtime.exec() si quieres que en un proceso separado.

Me pregunto si se utiliza subprocess.Popen funcionaría mejor para usted.

tal vez haciendo algo como shell = true

Temas no funcionan porque son parte del proceso. La llamada system no funcionará porque bloquea como su nuevo proceso se ejecuta.

Usted tendrá que usar algo como os.fork() a generar un nuevo proceso y ejecutarlo en el nuevo proceso. Echar un vistazo a subproceso para algunas buenas soluciones a este estilo de libro de cocina.

En general, para poner en marcha un servidor de larga duración que es independiente de su matriz, es necesario que en demonio. Dependiendo de su entorno, hay varias envolturas que pueden ayudar en este proceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top