Seite 1 von 1

environment variabeln aus bat übernehmen

Verfasst: Dienstag 25. März 2008, 18:10
von haggi
Ich muss leider aus python heraus eine .bat datei ausführen, die mir einige Dinge installiert und am Ende environment Variabeln setzt.

Diese Variablen würde ich gerne nach python übernehmen.

Ich mache folgendes:

in meinem bat "mein.bat" wird folgendes gemacht:

Code: Alles auswählen

set TOLLERPATH="c:\irgendwo\hin"
Aus python heraus mache ich:

Code: Alles auswählen

import subprocess
import os

subprocess.call("mein.bat")
print os.environ['TOLLERPATH']
geht leider nicht. Gibts da einen einfachen weg?
Ich könnte natürlich den output parsen und die env Variabeln printen und dann in python explizit setzen. Falls es da einen eleganteren Weg gibt, wäre ich hocherfreut ;)

Verfasst: Dienstag 25. März 2008, 18:14
von Leonidas
Nein, du kannst keine Umgebungsvariablen von Kinderprozessen herausholen.

Verfasst: Dienstag 25. März 2008, 19:06
von Holzdolph
gibts da nicht ein paar module um .ini files zu erstellen/lesen.
bzw ein textfile (.bat) einlesen und paar variablen daraus speichern sind ja nicht mal 10 zeilen code.

Verfasst: Mittwoch 26. März 2008, 07:58
von jens
Für ini Dateien gibt es den [mod]configparser[/mod]...

Es gibt allerdings kein Modul um aus Batchdateien die Variablen auszulesen. Aber du kannst IMHO recht einfach das selber schreiben...

Verfasst: Mittwoch 26. März 2008, 09:47
von haggi
Danke für die Infos. Dann werde ich in meinem Batfile einfach die Variabeln ausgeben und in meinem script dann kurz parsen, das ist kein Problem.

Verfasst: Mittwoch 26. März 2008, 10:39
von Hyperion
Ich habe im Moment ein ähnliches Problem: Ich habe mehrere Bat-Files, die Variablen definieren und die sich verschachtelt aufrufen. Das eine ist dabei ein wenig komplexer, d.h. es werden nicht nur per simplen SET Vars definiert, sondern teilweise mit Bedingungen geprüft, ob solche gesetzt werden müssen.

Ich werde wohl oder übel nun selber ein BAT-File schreiben müssen, welches einige Prozesse startet - per Python wäre es mir lieber, aber das erfordert wohl zu viel Aufwand.

So nen Bat-File-Parser inkl. Mini-Interpreter wäre sicherlich ne feine Sache in diesem Falle :-)

Verfasst: Mittwoch 26. März 2008, 10:41
von jens
Hm. Man könnte doch mit subprocess eine Batch Datei aufrufen, die die anderen ausführt und am ende mit "set" alle Variablen anzeigt. Die Anzeige verarbeitet man dann in Python...

Verfasst: Mittwoch 26. März 2008, 10:50
von Hyperion
Stimmt ... das wäre evtl. ne gute Idee! Muss ich gleich mal testen ...

Verfasst: Mittwoch 26. März 2008, 12:38
von Leonidas
jens hat geschrieben:Hm. Man könnte doch mit subprocess eine Batch Datei aufrufen, die die anderen ausführt und am ende mit "set" alle Variablen anzeigt. Die Anzeige verarbeitet man dann in Python...
Wenn die aufgerufenen Batch-Dateien die Variablen definieren, dann funktioniert es logischerweise nicht.

Verfasst: Mittwoch 26. März 2008, 13:02
von jens
Warum sollte das nicht funktionieren?

z.B.:

dateiA.cmd

Code: Alles auswählen

set test="jo"
dateiB.cmd

Code: Alles auswählen

call dateiA.cmd
set
Wenn man dateiB aufruft, steht in der liste von "set" das test gleich "jo" ist.

Python müßte also dateiB.cmd aufrufen und in den Ausgaben nach den Variablen suchen.

Verfasst: Mittwoch 26. März 2008, 14:00
von Leonidas
jens hat geschrieben:Warum sollte das nicht funktionieren?
Ich bin davon ausgegangen, dass die Windows Shell Skripte in Unterprozessen ausführt, wie Unix-Shells das tun. Was passiert wenn man die Batch-Dateien ohne ``call`` aufruft?

Verfasst: Mittwoch 26. März 2008, 14:05
von jens
Ohne "call" geht's nicht, es würde sich die startende Batchdatei beenden. Man kann höchstens "start" benutzten...
Was call allerdings genau macht, weiß ich auch nicht. Die Hilfe spuckt nur folgendes aus:
Ruft aus einem Batchprogramm ein anderes Batchprogramm auf, ohne das übergeordnete Batchprogramm zu beenden.

Verfasst: Mittwoch 26. März 2008, 14:10
von Leonidas
Also vermutlich mit ``source``/``.`` unter Unices zu vergleichen.

Verfasst: Mittwoch 26. März 2008, 14:21
von jens
Jup, denke schon. Macht eigentlich das selbe...

Verfasst: Mittwoch 26. März 2008, 14:32
von Hyperion
Problem bei mir ist nur, dass die sich so nicht aufrufen ... aber evtl. kann ich das an den Stellen riskieren umzuändern!