diff --git a/Doc/library/os.rst b/Doc/library/os.rst index bc4cf4284a0..0e467411446 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -118,10 +118,11 @@ process and user. If the platform supports the :func:`unsetenv` function, you can delete items in this mapping to unset environment variables. :func:`unsetenv` will be called automatically when an item is deleted from ``os.environ``, and when - :meth:`os.environ.clear` is called. + one of the :meth:`pop` or :meth:`clear` methods is called. .. versionchanged:: 2.6 - Also unset environment variables when calling :meth:`os.environ.clear`. + Also unset environment variables when calling :meth:`os.environ.clear` + and :meth:`os.environ.pop`. .. function:: chdir(path) diff --git a/Lib/os.py b/Lib/os.py index 7d21763603e..ccc11f49de4 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -450,6 +450,9 @@ else: for key in self.data.keys(): unsetenv(key) del self.data[key] + def pop(self, key, *args): + unsetenv(key) + return self.data.pop(key, *args) def has_key(self, key): return key.upper() in self.data def __contains__(self, key): @@ -511,6 +514,9 @@ else: for key in self.data.keys(): unsetenv(key) del self.data[key] + def pop(self, key, *args): + unsetenv(key) + return self.data.pop(key, *args) def copy(self): return dict(self) diff --git a/Misc/NEWS b/Misc/NEWS index 683bef06aa6..be6b6ff6842 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -274,11 +274,14 @@ Core and builtins Library ------- +- Issues #1181, #1287: unsetenv() is now called when the os.environ.pop() + and os.environ.clear() methods are used. + - ctypes will now work correctly on 32-bit systems when Python is configured with --with-system-ffi. - Patch #1203: ctypes now does work on OS X when Python is built with - --disable-toolbox-glue + --disable-toolbox-glue. - collections.deque() now supports a "maxlen" argument.