From ddfb2c3a338a8c1550774648f816e96c41f59de1 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 13 Aug 2010 16:30:15 +0000 Subject: [PATCH] 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. --- Lib/platform.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/Lib/platform.py b/Lib/platform.py index 8051041679b..f7ffd002eb7 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