Question

J'ai un script de test qui a besoin d'ouvrir un processus (un serveur Pyro), faire des choses qui appelle le processus ouvert pour l'information, et quand tout fait devez fermer le processus vers le bas. Il fait partie d'un test automatisé sur un serveur intermédiaire.

En Python 2.6, vous pouvez faire ceci:

pyro_server = subprocess.Popen(['python', 'pyro_server.py'])
# Do stuff, making remote calls to the Pyro server on occasion
pyro_server.terminate()

Hélas, je suis enfermé dans Python 2.4 ici au travail, donc je n'ai pas accès à cette fonction. Et si je laisse la fin de script bien sûr vit le serveur. Que dois-je faire pour fermer / tuer ce processus avant de se terminer le script?

Était-ce utile?

La solution

  1. Vous pouvez recopier subprocess.py à votre répertoire python2.4 dist-packages. Il devrait fonctionner comme il est un simple wrapper autour de l'ancienne bibliothèque popen.

  2. L'objet Popen mettre fin à la fonction ne fait rien de plus que ce qui suit:

    import os, le signal

    os.kill (pid, signal.SIGKILL)

pid est l'ID de processus du processus enfant. signal.SIGKILL est le numéro 9, et est un signal standard unix kill. Vous pouvez voir comment frayer un sous-processus et obtenir son pid en python 2.4 avec le module popen ici :

Autres conseils

@BrainCore. Notez que os.kill ne sont pas disponibles sur les fenêtres en python24, consultez la documentation

Ma solution pour avoir tué un objet subprocess.Popen sur les fenêtres lors de l'utilisation python24 est la suivante:

import os, subprocess
p = subprocess.Popen(...)
res = os.system('taskkill /PID %d /F' % p.pid)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top