2016-07-21 12 views
2

Ich habe ein Python-Skript script_a.py, das subprocess.call() verwendet, das ein anderes Skript script_b.py als letzte Anweisung vor dem Beenden ausführt. Ich brauche script_b.py zu warten, bis script_a.py schließt, bevor ich mit seinen eigenen Anweisungen fortfahre. Dazu verwende ich eine while-Schleife innerhalb script_b.py. Wie kann ich das machen? Alle meine aktuellen Lösungen, die ich versucht habe, haben script_a.py warten bis script_b.py fertig ist, bevor es sich selbst schließt. Ich habe das Gefühl, das könnte atexit() oder etwas ähnliches beinhalten, aber ich bin verloren.Führen Sie ein anderes Python-Skript aus, und fahren Sie dann das aktuelle Skript herunter.

Vielen Dank!

+0

es klingt wie Sie das falsche Konstrukt verwenden ... Ich glaube, Sie wollen 'os.exec *' statt 'subprocess' ... –

+0

Got es. Für den Fall, dass 'script_b.py' alles hat, was es benötigt, um in sich selbst ausgeführt zu werden, was soll ich dann in der Liste der Argumente übergeben, die die exec * -Funktionen mir übergeben? – Alt182

+0

können Sie wahrscheinlich einfach übergeben ["Python", "script_b.py"] ... es ist eine Weile her, seit ich das getan habe ... –

Antwort

1

konnten Sie einige völlig Hacky Mist

script_b.py

while not os.path.exists("a.done"):pass 
time.sleep(0.2) # a little longer just to be really sure ... 
os.remove("a.done") 
... # rest of script b 

script_a.py

import atexit 
atexit.register(lambda *a:open("a.done","w")) 
machen

oder statt Popen tun nur

os.execl("/usr/bin/python","script_b.py") 
1

Ihre script_a.py wäre:

import subprocess 
#do whatever stuff you want here 
p = subprocess.Popen(["python","b.py"]) 
p.wait() 
p.terminate() 

#continue doing stuff 
+0

Wo schließt das 'script_a.py' so der Subprozess p kann es tun Arbeit? – Alt182

+0

Tut mir leid, ich habe es andersherum gelesen. Wenn _a_ in der letzten Anweisung _b_ aufruft und b warten muss, bis ein Befehl abgeschlossen ist, haben Sie eine Endlosschleife. Verwenden Sie einfach ein anderes Skript _c_, das _a_ und dann _b_ aufruft. Irgendein Grund, warum Sie das nicht tun können? – Javier

+0

Also gibt es keine Möglichkeit zu erzwingen, dass script_a mit der nächsten Anweisung fortfährt (was 'sis.exit()' ist, unabhängig davon, wann script_b beendet ist. – Alt182