Der erste Aufruf Popen
mit shell=False
bedeutet nicht, dass der zugrunde liegende Python nicht versucht, ein Fenster/eine Konsole zu öffnen. Es ist nur so, dass die aktuelle Python-Instanz python.exe
direkt und nicht in einer System-Shell (cmd oder sh) ausführt.
Zweitens, Popen
gibt ein Handle auf den Prozess zurück, und Sie müssen eine wait()
auf diesem Handle durchführen, damit es ordnungsgemäß beendet wird, oder Sie könnten einen nicht mehr existierenden Prozess generieren (abhängig von der Plattform, auf der Sie ausgeführt werden). Ich schlage vor, dass Sie versuchen
p = subprocess.Popen(["python.exe", "a.py"], shell=False)
return_code = p.wait()
auf Prozess Beendigung warten und Rückgabecode erhalten.
Beachten Sie, dass Popen
eine sehr schlechte Möglichkeit ist, Prozesse im Hintergrund auszuführen. Der beste Weg, einen separaten Thread
import subprocess
import threading
def run_it():
subprocess.call(["python.exe", "a.py"], shell=False)
t = threading.Thread(target=run_it)
t.start()
# do your stuff
# in the end
t.join()
Mögliche Duplikat zu verwenden wäre [Python: subprocess Aufruf mit Shell = False funktioniert nicht] (http://stackoverflow.com/questions/25465700/python-subprocess-call- with-shell-false-not-working) –