Öffnen Sie mit Python eine Shell-Umgebung, führen Sie einen Befehl aus und beenden Sie die Umgebung

Ich versuche, einen Prozess mit Python zu automatisieren. Wenn ich nur im Terminal bin, sieht der Workflow folgendermaßen aus:

user:> . /path/to/env1.sh
user:> python something.py
user:> exit
user:> . /path/to/env2.sh
user:> python something2.py
user:> exit 

etc für noch ein paar schritte. Jederenv.sh erzeugt ein neues Skript mit einer ganzen Reihe von Umgebungsvariablen und was nicht im aktuellen Verzeichnis festgelegt ist. Ich bin mir ziemlich sicher, dass ich einen Unterprozess verwenden muss, aber ich bin mir nicht ganz sicher, wie ich vorgehen soll. Im Idealfall würde der Workflow so aussehen: Neue Shell öffnen -> einige Befehle ausführen -> Shell beenden -> nach Bedarf wiederholen.

EDIT: Es scheint eine Klarstellung erforderlich zu sein. Ich verstehe, wie man es benutztsubprocess.Popen() undsubprocess.call() um Dinge aus der Shell heraus aufzurufen, aus der das Python-Skript aufgerufen wurde. Das brauche ich nicht. Wenn man anruftenv.sh Es setzt eine ganze Tonne Umgebungsvariablen und ein paar andere relevante Dinge und versetzt Sie dann in eine Shell, um Befehle auszuführen. Es ist wichtig zu beachtenenv.sh endet erst, wenn man tipptexit nach dem Ausführen der gewünschten Befehle. Verwendensubprocess.call("./env.sh", shell = True) öffnet die Shell und bleibt dort stehen. Es ist wie bei der Eingabe eines Befehls./env.sh außer dass, wenn man das ausgibtexit Befehl, der Rest des Python-Skripts. Damit:

subprocess.call(". /path/to/env.sh", shell = True)
subprocess.call("python something.py", shell = True)

Tut NICHT, wozu ich es brauche, und tut auch nicht:

p = subprocess.Popen(". /path/to/env.sh", shell = True)
subprocess.call("python something.py", shell = True)
p.kill()

Antworten auf die Frage(5)

Ihre Antwort auf die Frage