]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #9560: Use -b option of the file command in _syscmd_file()
authorVictor Stinner <victor.stinner@haypocalc.com>
Fri, 13 Aug 2010 16:30:15 +0000 (16:30 +0000)
committerVictor Stinner <victor.stinner@haypocalc.com>
Fri, 13 Aug 2010 16:30:15 +0000 (16:30 +0000)
Omit the filename to avoid enconding issues, especially with non encodable
characters in the Python full path.

Lib/platform.py

index 8051041679be7ef7d8d5bee989d305b313302dd3..f7ffd002eb74705ecfc65de9b1badf218c31e92a 100755 (executable)
@@ -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