(Wieder mal: Folgendes gilt fuer Linux/Unix, von Win und Dos habe ich keinen Plan...)
Wenn ein Prozess einen anderen Prozess starten moechte, gibt's dazu die Linux-System-Calls exec*. In der Python-Doku steht das zwar nicht, aber ich schaetze, die gleichnamigen Python-Funktionen rufen im Wesentlichen einfach diese System-Calls auf, jedenfalls funktionieren die System-Calls auch so wie ich oben beschrieben habe: Der neue Prozess wird in den Speicher geladen, dabei wird der alte Prozess vollkommen ersetzt, dann wird der neue Prozess ausgefuehrt. Ist der neue Prozess zuende, gibt's keine Moeglichkeit, zu dem alten Prozess zurueckzukehren, da der nicht mehr im Speicher ist. Dies ist die einzige Moeglichkeit fuer einen Unix-Prozess, einen neuen Prozess zu starten.
Moechte man einen "Subprozess" ausfuehren, sodass das alte Programm waehrend oder nach Ausfuehren des neuen Prozesses weiterlaeuft, muss man den fork-System-Call benutzen (dazu gibt's ja auch die entsprechende Python-Funktion). Der erzeugt einen Kindprozess, der zunaechst genau das gleiche Programm ausfuehrt wie der urspruengliche Prozess. Den Kindprozess laesst man dann exec* mit dem gewuenschten Programm ausfuehren, sodass man dann den urspruenglichen Prozess mit dem urspruenglichen Programm hat und den neuen Prozess, der ein neues Programm ausfuehrt. (Siehe Codebeispel in meinem letzten Post).
So wie oben beschrieben laeuft auf unterster Betriebssystemebene
jeder Start eines Programmes ab, anders geht's nicht. Das ist natuerlich kompliziert, deswegen gibt's Funktionen, die einem den Grossteil der Arbeit abnehmen, z.B. Pythons
os.system. Die Doku sagt dazu:
Python Doku hat geschrieben:Execute the command (a string) in a subshell
d.h. via fork/exec* etc. wird eine Shell als Subprozess gestartet (sodass das urspruengliche Programm weiterlaeuft), und in dieser wiederum wir dein Befehl ausgefuehrt, als haettest du ihn in eine Shell getippt. D.h. du kannst Sachen benutzen, die Shell-spezifisch sind wie Wildcards (*, ?), Ausgabeumlenkung (>, <) und Shell-Kommandos (echo,...).
Meistens wird man exec* nicht anwenden, weil's wie gesagt sehr low level ist. (Macht aber Spass und man lernt was!
) Python bietet einem sehr viele andere Moeglichkeiten, Prozesse zu starten, u.a. eben
os.system.