2016-05-09 15 views
0
def run_cmd(self, cmd): 
    print cmd 

    status = os.system(cmd) 
    print 'Command ran with Status: %s' % status 

    if status: 
     s = 'Command Failed: Status: %s for %s' % (status, cmd) 
     print s 
     sys.exit(status) 
    else: 
     s = 'Command Success: %s' % cmd 

    return status 

Ich verwende diese Funktion, um ein Python-Skript aus einem anderen Skript auszuführen.Python ein anderes Skript aus einem Python-Skript ausführen

Ex:

command_to_exec = 'python script_b.py' 
run_cmd(command_to_exec) 

Nun, wenn script_b.py script_a.py Ausfahrten mit dem Status versagt.

Das ist in Ordnung.

Fall 2:

command_to_exec = 'python script_a.py --options' 
rum_cmd(command_to_exec) 

Dieser Fall ist script_a.py Lauf 'Python script_a.py' von selbst. In diesem Fall ist das äußere script_a.py immer noch erfolgreich, wenn das neu erstellte Script script_a.py fehlschlägt, weil es den Fehler von inner script_a.py (wegen sys.exit (status))

nicht abfangen konnte

Nun, wie gehe ich mit dieser Situation um? (Wenn inneres script_a fehlschlägt, sollte externes script_a beendet werden)

+2

Warum rufen Sie ganze Skripte so? Warum importieren Sie nicht das "innere" Skript oder die Teile davon, die Sie brauchen, und führen Sie diese aus? Warum nicht eine Funktion im 'inneren' Skript aufrufen? – davo36

+0

Verwenden Sie möglicherweise Subprozess https://docs.python.org/2/library/subprocess.html#replacing-os-system – Ashish

+0

Sie könnten 'sys.argv [0]' testen, um zu verhindern, dass Sie selbst laufen, was zu einem schrecklichen führen könnte Gabelbombe (fortlaufender Laichprozess). – cdarke

Antwort

0

Sie können Ihr anderes Skript einfach als Modul ausführen. Angenommen, Sie haben den Ordner haben:
dir
      | --- main.py
      | --- imported.py
Und Sie wollen die zweite von der ersten laufen. Verwenden Sie einfach import, wie folgt aus:

import imported #the file name without the extension 

Es wird diese Datei ausgeführt werden, und Sie werden in der Lage, es ist Vars und Funktionen in Ihrem Haupt-Skript zu verwenden.

+0

In meinem Fall ist das nicht möglich, da ich dem erstellten Skript verschiedene Optionen geben kann. –

+0

Fügen Sie einfach Ihr Skript in eine Funktion ein und übergeben Sie die Argumente ... –