Vai desembolsar scripts chamados de python persistem após as extremidades script Python?

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

  •  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,)
    )
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top