2017-09-04 1 views
0

Ich muss ein anderes Python-Skript ausführen, die Daten in meinem Skript, mit dem ich derzeit arbeite. Ich benutze subprocess es auszuführen:So führen Sie Python-Skript mit Subprozess aus einer anderen Lieferung

cmd = 'python /home/usr/script.py arg1 arg2 arg3' 
subprocess.Popen(cmd, shell=True) 

Aber haben ein Problem. Vorheriges Skript erzeugt wenige Verzeichnisse im "aktuellen Verzeichnis", dh in dem Verzeichnis, in dem es ausgeführt wurde. Und ich kann vorheriges Skript nicht ändern, weil es nicht mein ist. Wie setze ich das aktuelle Verzeichnis auf das Verzeichnis, wo ich Daten bekommen möchte? \n
Ein weiteres kleines Problem ist, dass, wenn ich subprocess.Popen() ausführen mein Skript nicht endet. Sollte ich es anders machen?

Antwort

1

der beste Weg ist subprocess.call stattdessen zu verwenden (wartet & beendet, Popen ohne entsprechende wait() kann einen Zombie-Prozess erstellen) und verwenden Sie die cwd= Parameter aktuelles Verzeichnis für die subprocess angeben:

cmd = ['python','/home/usr/script.py','arg1','arg2','arg3'] 
return_code = subprocess.call(cmd, cwd="/some/dir") 

(auch übergeben Sie den Befehl als eine Liste, und löschen Sie shell=True, Sie brauchen es hier nicht)

+0

Ich finde 'os.chdir()' Methode als Lösung, aber Ihr Pfad als Methode Argument ist besser. Ty für Hilfe. –

+1

Ja, 'os.chdir()' sollte vermieden werden, da es das aktuelle Verzeichnis für den aktuellen Prozess ändert (und auch andere Threads, falls es welche gibt) –

Verwandte Themen