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.
This commit is contained in:
Victor Stinner 2010-08-13 16:30:15 +00:00
parent 3060c4573f
commit ddfb2c3a33
1 changed files with 6 additions and 12 deletions

View File

@ -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