environment variabeln aus bat übernehmen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
haggi
User
Beiträge: 42
Registriert: Mittwoch 27. Februar 2008, 10:18
Kontaktdaten:

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 ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Nein, du kannst keine Umgebungsvariablen von Kinderprozessen herausholen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Holzdolph
User
Beiträge: 23
Registriert: Donnerstag 22. November 2007, 17:43

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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
haggi
User
Beiträge: 42
Registriert: Mittwoch 27. Februar 2008, 10:18
Kontaktdaten:

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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 :-)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Stimmt ... das wäre evtl. ne gute Idee! Muss ich gleich mal testen ...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also vermutlich mit ``source``/``.`` unter Unices zu vergleichen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Jup, denke schon. Macht eigentlich das selbe...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Problem bei mir ist nur, dass die sich so nicht aufrufen ... aber evtl. kann ich das an den Stellen riskieren umzuändern!
Antworten