diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2014-02-13 10:14:48 +0200 |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2014-02-13 10:14:48 +0200 |
commit | 7dfaa27fddb57ffcaf79bf21c49fd2a2cd741ab9 (patch) | |
tree | e5795f29cb7a2be5c2ed8d6b6bdab8091b231cdd /Lib/posixpath.py | |
parent | b58f053e48923cba2708410bd215371a7d1d5250 (diff) | |
parent | dbb101909d4bcc7cfe7a8063bb4ac4ec879ecac8 (diff) | |
download | cpython-7dfaa27fddb57ffcaf79bf21c49fd2a2cd741ab9.tar.gz cpython-7dfaa27fddb57ffcaf79bf21c49fd2a2cd741ab9.zip |
Issue #6815: os.path.expandvars() now supports non-ASCII environment
variables names and values.
Diffstat (limited to 'Lib/posixpath.py')
-rw-r--r-- | Lib/posixpath.py | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/Lib/posixpath.py b/Lib/posixpath.py index 492c415aa5d..812582ad238 100644 --- a/Lib/posixpath.py +++ b/Lib/posixpath.py @@ -279,6 +279,7 @@ def expandvars(path): search = _varprogb.search start = b'{' end = b'}' + environ = getattr(os, 'environb', None) else: if '$' not in path: return path @@ -288,6 +289,7 @@ def expandvars(path): search = _varprog.search start = '{' end = '}' + environ = os.environ i = 0 while True: m = search(path, i) @@ -297,18 +299,18 @@ def expandvars(path): name = m.group(1) if name.startswith(start) and name.endswith(end): name = name[1:-1] - if isinstance(name, bytes): - name = str(name, 'ASCII') - if name in os.environ: + try: + if environ is None: + value = os.fsencode(os.environ[os.fsdecode(var)]) + else: + value = environ[name] + except KeyError: + i = j + else: tail = path[j:] - value = os.environ[name] - if isinstance(path, bytes): - value = value.encode('ASCII') path = path[:i] + value i = len(path) path += tail - else: - i = j return path |