diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2010-08-13 16:30:15 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2010-08-13 16:30:15 (GMT) |
commit | ddfb2c3a338a8c1550774648f816e96c41f59de1 (patch) | |
tree | de6b0cdc76293088f94eb62db2ab61d3c21bff54 | |
parent | 3060c4573ffa4e26deb7d9cbd3a14b8335977075 (diff) | |
download | cpython-ddfb2c3a338a8c1550774648f816e96c41f59de1.zip cpython-ddfb2c3a338a8c1550774648f816e96c41f59de1.tar.gz cpython-ddfb2c3a338a8c1550774648f816e96c41f59de1.tar.bz2 |
Issue #9560: Use -b option of the file command in _syscmd_file()
Omit the filename to avoid enconding issues, especially with non encodable
characters in the Python full path.
-rwxr-xr-x | Lib/platform.py | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/Lib/platform.py b/Lib/platform.py index 8051041..f7ffd00 100755 --- a/Lib/platform.py +++ b/Lib/platform.py @@ -990,9 +990,8 @@ def _syscmd_file(target,default=''): """ Interface to the system's file command. The function uses the -b option of the file command to have it - ommit the filename in its output and if possible the -L option - to have the command follow symlinks. It returns default in - case the command should fail. + omit the filename in its output. Follow the symlinks. It returns + default in case the command should fail. """ if sys.platform in ('dos','win32','win16','os2'): @@ -1000,7 +999,7 @@ def _syscmd_file(target,default=''): return default target = _follow_symlinks(target).replace('"', '\\"') try: - f = os.popen('file "%s" 2> %s' % (target, DEV_NULL)) + f = os.popen('file -b "%s" 2> %s' % (target, DEV_NULL)) except (AttributeError,os.error): return default output = f.read().strip() @@ -1020,8 +1019,6 @@ _default_architecture = { 'dos': ('','MSDOS'), } -_architecture_split = re.compile(r'[\s,]').split - def architecture(executable=sys.executable,bits='',linkage=''): """ Queries the given executable (defaults to the Python interpreter @@ -1056,11 +1053,11 @@ def architecture(executable=sys.executable,bits='',linkage=''): # Get data from the 'file' system command if executable: - output = _syscmd_file(executable, '') + fileout = _syscmd_file(executable, '') else: - output = '' + fileout = '' - if not output and \ + if not fileout and \ executable == sys.executable: # "file" command did not return anything; we'll try to provide # some sensible defaults then... @@ -1072,9 +1069,6 @@ def architecture(executable=sys.executable,bits='',linkage=''): linkage = l return bits,linkage - # Split the output into a list of strings omitting the filename - fileout = _architecture_split(output)[1:] - if 'executable' not in fileout: # Format not supported return bits,linkage |