web-dev-qa-db-fra.com

comment appeler un programme depuis python sans attendre qu'il revienne

existe-t-il un moyen d'appeler un programme à partir de python sans attendre qu'il revienne? j'ai créé un script qui copie un programme dans un répertoire et exécute ce programme. mais quand j'appelle le programme à partir de python , le script python ne se ferme pas tant que le programme que j'ai lancé ne se termine pas. J'ai essayé os.system et Popen. existe-t-il une autre façon de procéder?

Ajout d'informations: os.spawnl avec os.P_DETACH ne fonctionne toujours pas; selon les documents, "P_DETACH est similaire à P_NOWAIT, mais le nouveau processus est détaché de la console du processus appelant". mais il est toujours en quelque sorte attaché à mon processus d'appel (le script d'appel ne se fermera pas avant le retour des exécutables appelés)

Programme:

os.system("start test.exe")
print "Done"

après avoir exécuté test.exe, il imprime Terminé. mais il ne met pas fin à l'exécution du script (processus de script toujours en cours). essayé de créer un thread démon et Popen avec un P_DETACH, toujours pas.

21
maranas

J'ai posté une solution pour détacher un processus dans un question précédente .

9
newtover

En utilisant poll() au lieu de wait() sur Popen, il ne se bloquera pas et n'attendra pas l'exécution du programme. Cependant, je pense que la seule façon d'arrêter vraiment l'ensemble du programme d'attendre est de créer un thread démoniaque qui démarre le processus. De cette façon, vous n'aurez jamais à l'attendre.

class MyThread(threading.Thread):
    def run(self):
        '''Start your thread here'''
        pass

thread = MyThread()
thread.daemon = True
thread.start()
4
Wolph

Sous Windows, si vous appelez le programme à l'aide de la commande Shell START, vous devriez pouvoir "libérer" le processus parent et lui permettre de quitter. Essayez START /? à l'invite DOS pour en savoir plus.

2
Peter Hansen