summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2010-08-13 16:30:15 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2010-08-13 16:30:15 (GMT)
commitddfb2c3a338a8c1550774648f816e96c41f59de1 (patch)
treede6b0cdc76293088f94eb62db2ab61d3c21bff54
parent3060c4573ffa4e26deb7d9cbd3a14b8335977075 (diff)
downloadcpython-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-xLib/platform.py18
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