[Python-checkins] r80971 - in python/branches/py3k: Doc/library/os.rst Lib/os.py Lib/subprocess.py Misc/NEWS
victor.stinner
python-checkins at python.org
Sat May 8 13:10:09 CEST 2010
Author: victor.stinner
Date: Sat May 8 13:10:09 2010
New Revision: 80971
Log:
Issue #8514: Add os.fsencode() function (Unix only): encode a string to bytes
for use in the file system, environment variables or the command line.
Modified:
python/branches/py3k/Doc/library/os.rst
python/branches/py3k/Lib/os.py
python/branches/py3k/Lib/subprocess.py
python/branches/py3k/Misc/NEWS
Modified: python/branches/py3k/Doc/library/os.rst
==============================================================================
--- python/branches/py3k/Doc/library/os.rst (original)
+++ python/branches/py3k/Doc/library/os.rst Sat May 8 13:10:09 2010
@@ -155,6 +155,17 @@
These functions are described in :ref:`os-file-dir`.
+.. function:: fsencode(value)
+
+ Encode *value* to bytes for use in the file system, environment variables or
+ the command line. Uses :func:`sys.getfilesystemencoding` and
+ ``'surrogateescape'`` error handler for strings and returns bytes unchanged.
+
+ Availability: Unix.
+
+ .. versionadded:: 3.2
+
+
.. function:: get_exec_path(env=None)
Returns the list of directories that will be searched for a named
Modified: python/branches/py3k/Lib/os.py
==============================================================================
--- python/branches/py3k/Lib/os.py (original)
+++ python/branches/py3k/Lib/os.py Sat May 8 13:10:09 2010
@@ -504,6 +504,17 @@
return environb.get(key, default)
__all__.append("getenvb")
+if name != 'nt':
+ def fsencode(value):
+ """Encode value for use in the file system, environment variables
+ or the command line."""
+ if isinstance(value, bytes):
+ return value
+ elif isinstance(value, str):
+ return value.encode(sys.getfilesystemencoding(), 'surrogateescape')
+ else:
+ raise TypeError("expect bytes or str, not %s" % type(value).__name__)
+
def _exists(name):
return name in globals()
Modified: python/branches/py3k/Lib/subprocess.py
==============================================================================
--- python/branches/py3k/Lib/subprocess.py (original)
+++ python/branches/py3k/Lib/subprocess.py Sat May 8 13:10:09 2010
@@ -1079,32 +1079,24 @@
self._set_cloexec_flag(errpipe_write)
if _posixsubprocess:
- fs_encoding = sys.getfilesystemencoding()
- def fs_encode(s):
- """Encode s for use in the env, fs or cmdline."""
- if isinstance(s, bytes):
- return s
- else:
- return s.encode(fs_encoding, 'surrogateescape')
-
# We must avoid complex work that could involve
# malloc or free in the child process to avoid
# potential deadlocks, thus we do all this here.
# and pass it to fork_exec()
if env:
- env_list = [fs_encode(k) + b'=' + fs_encode(v)
+ env_list = [os.fsencode(k) + b'=' + os.fsencode(v)
for k, v in env.items()]
else:
env_list = None # Use execv instead of execve.
if os.path.dirname(executable):
- executable_list = (fs_encode(executable),)
+ executable_list = (os.fsencode(executable),)
else:
# This matches the behavior of os._execvpe().
path_list = os.get_exec_path(env)
executable_list = (os.path.join(dir, executable)
for dir in path_list)
- executable_list = tuple(fs_encode(exe)
+ executable_list = tuple(os.fsencode(exe)
for exe in executable_list)
self.pid = _posixsubprocess.fork_exec(
args, executable_list,
Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS (original)
+++ python/branches/py3k/Misc/NEWS Sat May 8 13:10:09 2010
@@ -351,6 +351,9 @@
Library
-------
+- Issue #8514: Add os.fsencode() function (Unix only): encode a string to bytes
+ for use in the file system, environment variables or the command line.
+
- Issue #8571: Fix an internal error when compressing or decompressing a
chunk larger than 1GB with the zlib module's compressor and decompressor
objects.
More information about the Python-checkins
mailing list