Est-ce que shell scripts appelés de python après le script persistent python se termine?

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

  •  19-09-2019
  •  | 
  •  

Question

Dans le cadre d'un test automatisé, j'ai un script python qui doit appeler deux scripts shell qui commencent deux serveurs différents qui ont besoin d'interagir après le script d'appel se termine. (Il est en fait un script Jython, mais je ne suis pas sûr que les choses à ce point.) Que puis-je faire pour vous assurer que les serveurs restent après le script python se termine?

À ce stade, on les appelle quelque chose comme ceci:

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,)
    )
Était-ce utile?

La solution

fils de Python meurent tous avec Python. En outre, os.system bloque. Mais c'est correct - si la commande que os.system () fonctionne lance un nouveau processus (mais pas un processus enfant), tout ira bien. Sous Windows, par exemple, si la commande commence par « commencer » le « start » 'processus d restera après meurt Python.

EDIT: nohup est un équivalent à start sur Linux. (Merci à S. Lott).

Autres conseils

os.system() ne retourne pas jusqu'à ce que le processus de son lancement a pris fin. Utilisez subprocess ou Runtime.exec() si vous le voulez dans un processus séparé.

Je me demande si vous utilisez subprocess.Popen fonctionnerait mieux pour vous.

peut-être faire quelque chose comme shell = True

Fils ne fonctionnera pas parce qu'ils font partie du processus. L'appel system ne fonctionnera pas car il bloque que votre nouveau processus exécute.

Vous aurez besoin d'utiliser quelque chose comme os.fork() pour frayer un nouveau processus et l'exécuter dans le nouveau processus. Jetez un oeil à pour subprocess quelques bonnes solutions de style livre de recettes à ce sujet.

En général, pour lancer un serveur de longue durée qui est indépendante de son parent, vous devez daemon il. En fonction de votre environnement, il existe différents outils d'qui peuvent aider dans ce processus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top