Se scripts de shell llamados de pitón persisten después de que termine la secuencia de comandos de Python?
-
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,)
)
Solución
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.