2016-07-12 13 views
2

Ich arbeite an der Konvertierung eines älteren Systems von Batch-Dateien in Python. Ich habe eine Batch-Datei gefunden, die die Umgebungsvariablen für die Batch-Datei festlegt, die sie aufgerufen hat. Diese Werte werden dann in zukünftigen Aufrufen von Batchdateien erneut verwendet. Meine Umgebungsvariablen scheinen in den Fluss der Anrufe zu gehen, aber ich kann sie nicht wieder hochbringen. Ich habe hier zwei verschiedene Threads gelesen, die über etwas ähnliches sprechen, aber es ist nicht genau dasselbe. Ist es möglich, diese Umgebungsvariablen aus dem Subprozess abzurufen?Abrufen von Umgebungsvariablen aus Popen

Python subprocess/Popen with a modified environment

Set Environmental Variables in Python with Popen

Was ich tue jetzt:

p = Popen(process_, cwd=wd, stdout=PIPE, shell=True, 
      universal_newlines=True, stderr=STDOUT, env=env) 

Die alte Fluss von bat-Dateien:

foo.bat calls foo-setparam.bat 
foo-setparam.bat sets some variables 
foo.bat uses these variables 
foo.bat calls bar.bat 
bar.bat uses variables set by both foo.bat and foo-setparam.bat 

Update: Ich habe versucht, Hinzufügen von „Call "vor meinem popen parameter r. Ich habe das gleiche Verhalten.

+0

Ich bin mir nicht sicher, was Sie mit _einer Batch-Datei meinen, die die Umgebungsvariablen für die Batch-Datei definiert, die it_ aufgerufen hat. Es ist nicht möglich, dass ein Unterprozess die Umgebung des aufrufenden Prozesses ändert. Im besten Fall könnte eine Batch-Datei eine Ausgabe an den Aufrufer zurückgeben, die der Aufrufer untersuchen und dann entscheiden könnte, seine eigene Umgebung zu ändern. –

+0

Von meinem Verständnis in einer .bat-Datei der Aufruf Befehl führt die gezielte .bat-Datei in der gleichen Umgebung. – Nickolouse

+2

Jede Batch-Datei, die über 'call subprog.bat' aufgerufen wird und die _NOT_ einen' setlocal'-Befehl enthält, kann die Umgebung der aufrufenden Batch-Datei ändern ... – Aacini

Antwort

1

Im Allgemeinen ist es für einen untergeordneten Prozess nicht möglich, übergeordnete Umgebungsvariablen festzulegen, es sei denn, Sie möchten einen leicht bösartigen Pfad zum Erstellen eines Remotethreads im übergeordneten Prozess erstellen und diesen Thread zum Festlegen von Variablen in Ihrem Namen verwenden.

Es ist viel einfacher der Python-Skript zu haben, eine temporäre Datei schreiben, die eine Folge von Satz Befehlen wie enthält:

set VAR1=newvalue1 
set VAR2=newvalue2 

dann die anrufende Batch-Datei ändern, um Ihren Python-Skript zu nennen wie:

python MyScript.py 
call MyScript_Env.cmd 
+0

Leider kann ich die vorhandenen Batchdateien nicht ändern. – Nickolouse

+0

Entschuldigung, ich missverstanden, müssen Sie die Env-Variablen aus Batch-Datei sehen, die von Python aufgerufen wird? –

+0

Entschuldigung für den langen Umweg Ich wurde für eine Weile von dieser Aufgabe genommen. Ja, ich muss auf Umgebungsvariablen in Python zugreifen, die von einer Batch-Datei festgelegt wurden, die aus demselben Python-Skript aufgerufen wurde. – Nickolouse