Skip to content

Commit

Permalink
Issue #9560: Use -b option of the file command in _syscmd_file()
Browse files Browse the repository at this point in the history
Omit the filename to avoid enconding issues, especially with non encodable
characters in the Python full path.
  • Loading branch information
Victor Stinner committed Aug 13, 2010
1 parent 3060c45 commit ddfb2c3
Showing 1 changed file with 6 additions and 12 deletions.
18 changes: 6 additions & 12 deletions Lib/platform.py
Expand Up @@ -990,17 +990,16 @@ 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'):
# XXX Others too ?
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()
Expand All @@ -1020,8 +1019,6 @@ def _syscmd_file(target,default=''):
'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
Expand Down Expand Up @@ -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...
Expand All @@ -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
Expand Down

0 comments on commit ddfb2c3

Please sign in to comment.