Vai desembolsar scripts chamados de python persistem após as extremidades script Python?
-
19-09-2019 - |
Pergunta
Como parte de um teste automatizado, eu tenho um script python que precisa chamar dois shell scripts que começam dois servidores diferentes que precisam interagir após o término do script de chamada. (Na verdade, é um script Jython, mas não tenho certeza o que importa neste momento.) O que posso fazer para garantir que os servidores ficar até depois das extremidades script Python?
Neste ponto, eles são chamados algo como isto:
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,)
)
Solução
tópicos Python vão todos morrer com Python. Além disso, é os.system bloqueio. Mas tudo bem - se o comando que os.system () executa lançamentos de um novo processo (mas não um processo filho), tudo vai ficar bem. No Windows, por exemplo, se o comando começa com "iniciar" o processo "start" 'd permanecerá depois morre Python.
EDIT: nohup
é um equivalente a start
no Linux. (graças a S. Lott).
Outras dicas
os.system()
não retornar até que o processo se lança terminou. Use subprocess
ou Runtime.exec()
se quiser que ele em um processo separado.
Gostaria de saber se usando subprocess.Popen iria funcionar melhor para você.
talvez fazer algo como shell = True
Tópicos não vai funcionar porque eles são parte do processo. A chamada system
não vai funcionar porque bloqueia como o seu novo executa processo.
Você vai precisar usar algo como os.fork()
para gerar um novo processo e executá-lo no novo processo. Dê uma olhada na subprocess para algumas soluções de estilo bom livro de receitas para isso.
Geralmente, para lançar um servidor de longa duração que é independente do seu pai, você precisa daemonize-lo. Dependendo do seu ambiente, existem vários invólucros que podem ajudar neste processo.