Seite 1 von 1
Windows Systemvariablen in Pfade auflösen...
Verfasst: Mittwoch 24. November 2004, 23:06
von jens
Zu meiner kleinen Funktion hier:
http://python.sandtner.org/viewtopic.php?p=12528#12528
währe es doch schön, wenn in Pfadangaben automatisch Pfad-Platzhalter aufgelöst werden würden.
Bsp.:
"
%SystemRoot%\\System32\\"
Gibt es dafür das fertiges in pure Python?
Ich denk frag mal, bevor ich selber anfange zu basteln
Mit os.environ kommt man ja an alles dran, müßte man nur noch ersetzten...
Verfasst: Mittwoch 24. November 2004, 23:43
von Dookie
Hi jens,
versuch mal
print os.path.expandvars("%SystemRoot%\\System32\\")
eventuell musst du vorher das
%name% in ein ${name} wandeln,
das geht mit
re.sub('%(?P<name>\w+)%', '${\g<name>}', "%SystemRoot%\\System32\\")
Gruß
Dookie
Verfasst: Donnerstag 25. November 2004, 15:07
von jens
Klappt nur nach der Umwandlung... Aber immerhin muß ich nicht's komplett selber basteln!
Danke!
Verfasst: Donnerstag 25. November 2004, 15:25
von Sorgenkind
bei mir klappts nicht dookie
würde das so machen:
Code: Alles auswählen
import os,re
def _replsysvars(a):
var=a.group("var").upper() #upper wichtig, in os.environ sind alle keys groß geschrieben
return os.environ[var] #hier könnte man noch ein verhalten machen wenns die systemvariable nicht gibt
def replacesysvars(s):
return re.sub("%(?P<var>\w+)%", _replsysvars, s)
alternativ als einzeiler:
Code: Alles auswählen
re.sub("%(?P<var>\w+)%", lambda r: os.environ[r.group("var").upper()], "%SystemRoot%\\System32\\")
Verfasst: Donnerstag 25. November 2004, 15:31
von jens
Sorgenkind hat geschrieben:bei mir klappts nicht dookie
Verstehe ich nicht...
Code: Alles auswählen
print os.path.expandvars( re.sub('%(?P<name>\w+)%', '${\g<name>}', "%SystemRoot%\\System32") )
Was spuckt denn das aus?
Verfasst: Donnerstag 25. November 2004, 15:58
von Sorgenkind
Code: Alles auswählen
>>> print os.path.expandvars( re.sub('%(?P<name>\w+)%', '${\g<name>}', "%SystemRoot%\\System32\\") )
D:\WINDOWS\System32\
oh hab ich wohl was falsch kopiert ^^
Verfasst: Donnerstag 25. November 2004, 16:11
von Dookie
sorry, aber bei zu windowsspezifischen Problemen muss ich passen
Dookie
Verfasst: Mittwoch 11. Oktober 2006, 11:39
von HarryH
Hi,
Habe die obigen Infos mal zu einer Funktion zusammengeschlossen und noch etwas verbessert.
Falls z.B. eine Pfadname zwei Prozentzeichen enthält, diese Kombination aber keine Variable darstellt, werden diese nun bei meiner Funktion richtigerweise ignoriert. Dadurch wird vermieden, das sie durch "os.path.expandvars" falsch ausgewertet werden.
Hier die Funktion:
Code: Alles auswählen
def ExpandOsVars(name):
"""
Return the argument with environment variables (os.environ) expanded.
Substrings of the form "%var%", "$var" or "${var}" are replaced by the
value of environment variable name.
"""
def testvar(matchobj):
if matchobj.group(1) in os.environ:
return "$" + matchobj.group(1)
else:
return matchobj.group(0)
return os.path.expandvars(re.sub('%(?P<name>\w+)%', testvar, name))