2016-06-13 11 views
0

Wie kann ich vor Pythons os.path.expandvars() Behandlung von Null/Unset-Umgebungsvariablen schützen?Schutz vor Null-Umgebungsvariablen bei Verwendung von os.path.expandvars

Von os.path:

Malformed Variablennamen und Verweise auf nicht vorhandene Variablen werden unverändert gelassen.

>>> os.path.expandvars('$HOME/stuff') 
'/home/dennis/stuff' 
>>> os.path.expandvars('foo/$UNSET/bar') 
'foo/$UNSET/bar' 

ich diesen Schritt getrennt von anderer Bahnbearbeitung durchführen konnte (expanduser(), realpath(),normpath(), etc.), anstatt sie alle zusammen und prüfen Sie, Verkettungs wenn das Ergebnis unverändert, aber das ist normal, wenn es sind keine Variablen vorhanden - also müsste ich auch die Zeichenfolge analysieren, um zu sehen, ob sie irgendwelche Variablen hat. Ich befürchte, dass das nicht robust genug ist.

Das Problem tritt beim Erstellen einer Datei mit dem Ergebnis auf. Ich am Ende mit einer Datei mit dem Variablennamen als ein wörtlicher Teil des Dateinamens. Ich möchte stattdessen die Eingabe mit einer Ausnahme ablehnen.

+0

Hat Ihre Anwendung irgendeine Weise wissen, welche Umgebungsvariablen benötigt werden? Es könnte zuerst nach ihnen suchen und fehlende Zeichen auf leere Zeichenfolgen setzen. – Barmar

Antwort

2

Sie string.Template verwenden könnten, die für die Interpolation von Variablen eine ähnlichen Dollar-Zeichen-Syntax verwendet werden, aber KeyError erhöhen, wenn etwas nicht existiert, anstatt sie zu verlassen.

import os 
from string import Template 
print(Template('$HOME/stuff').substitute(os.environ)) 
+0

Das ist großartig! Es unterstützt sogar geschweifte geschweifte Klammern ('$ {HOME}'). Es unterstützt keine Variablen im Windows-Stil ('% VAR%'), aber es sieht so aus, als könnten Sie es unterklassifizieren, um das zu unterstützen. –