Frage

Ich habe ein Testskript, das einen Prozess (ein Pyro-Server) zu öffnen braucht, ein paar Sachen zu tun, die den geöffneten Prozess für Informationen rufen werden, und wenn es ist alles um den Prozess wieder nach unten getan werden schließen müssen. Es ist alles Teil eines automatisierten Tests auf einem Staging-Server.

In Python 2.6 können Sie dies tun:

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

Ach, ich bin in Python 2.4 gesperrt hier bei der Arbeit, damit ich keinen Zugang zu dieser Funktion. Und wenn ich nur das Skript am Ende des Kurses kann der Server lebt. Was soll ich / schließen tun, diesen Prozess zu töten, bevor das Skript beendet?

War es hilfreich?

Lösung

  1. Betrachten Sie auf Ihre python2.4 dist-Pakete Verzeichnis kopieren subprocess.py. Es sollte einfach funktionieren, da es eine einfache Wrapper um die alte popen Bibliothek ist.

  2. Das Popen Objekt beendet Funktion tut nichts anderes als die folgenden:

    import os, Signal

    os.kill (pid, signal.SIGKILL)

pid ist die Prozess-ID des Kindes Prozess. signal.SIGKILL ist die Nummer 9, und ist ein Standard-Unix-Kill-Signal. Sie können sehen, wie ein Teilprozess, um laichen und bekommt seine pid in Python 2.4 mit dem popen Modul hier :

Andere Tipps

@BrainCore. Beachten Sie, dass os.kill auf Fenster in python24 nicht verfügbar ist, überprüfen Sie die Dokumentation

Meine Lösung ein subprocess.Popen Objekt auf Fenster für das Töten, wenn python24 verwendet, ist dies:

import os, subprocess
p = subprocess.Popen(...)
res = os.system('taskkill /PID %d /F' % p.pid)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top