5

Ich habe nach einem Weg zum Starten und Beenden einer lang laufenden "Batch-Jobs" in Python gesucht. Im Moment verwende ich "os.system()", um einen lang laufenden Batch-Job in jedem Kindprozess zu starten. Wie Sie vielleicht vermutet haben, erzeugt "os.system()" einen neuen Prozess in diesem untergeordneten Prozess (Enkelprozess?), So dass ich den Batch-Job nicht aus dem übergeordneten Prozess löschen kann. Um etwas Visualisierung von dem, was ich gerade beschrieben:programmgesteuert ausführen und einen lang laufenden Batch-Prozess in Python

Main (grandparent) process, with PID = AAAA 
      | 
      |------> child process with PID = BBBB 
         | 
         |------> os.system("some long-running batch file) 
            [grandchild process, with PID = CCCC] 

Also, mein Problem ist, ich nicht den Enkel Prozess von den Großeltern töten ...

Meine Frage ist, gibt es eine Möglichkeit, ein beginnen lang andauernder Batch-Job in einem Child-Prozess und in der Lage sein, diesen Batch-Job durch Beenden des Child-Prozesses zu beenden? Was sind die Alternativen zu os.system(), die ich verwenden kann, damit ich den Batch-Job aus dem Hauptprozess beenden kann?

Danke !!

Antwort

2

Wenn Sie ein Posix-kompatibles System verwenden (z. B. Linux oder OS X) und nach dem untergeordneten Prozess keinen Python-Code ausführen muss, verwenden Sie os.execv. Vermeiden Sie im Allgemeinen os.system und verwenden Sie stattdessen das Modul subprocess.

-1

Wenn Sie Kontrolle über Start und Stopp von untergeordneten Prozessen haben wollen, müssen Sie Threading verwenden. In diesem Fall suchen Sie nicht weiter als Pythons threading Modul.

3

subprocess Modul ist die richtige Methode zum Erstellen und Steuern von Prozessen in Python.

aus der Dokumentation:

Die Subprozess-Modul ermöglicht es Ihnen, laichen neue Prozesse zu verbinden, um ihre Eingang/Ausgang/Fehler Rohre und ihre Rückkehr Code erhalten. Dieses Modul beabsichtigt, wie einige andere, ältere Module und Funktionen zu ersetzen:

os.system
os.spawn
os.popen
popen2
Befehle

so .. Wenn Sie Python 2.4+ verwenden, ist subprocess der Ersatz für os.system

zum Anhalten von Prozessen, überprüfen aus den terminate() und communicate() Methoden von Popen Objekte.