bpo-35348: Fix platform.architecture() (GH-11159)
Make platform.architecture() parsing of "file" command output more reliable: * Add the "-b" option to the "file" command to omit the filename; * Force the usage of the C locale; * Search also the "shared object" pattern. Co-Authored-By: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
parent
94cf308ee2
commit
0af9c33262
|
@ -608,13 +608,21 @@ def _syscmd_file(target, default=''):
|
||||||
|
|
||||||
import subprocess
|
import subprocess
|
||||||
target = _follow_symlinks(target)
|
target = _follow_symlinks(target)
|
||||||
|
# "file" output is locale dependent: force the usage of the C locale
|
||||||
|
# to get deterministic behavior.
|
||||||
|
env = dict(os.environ, LC_ALL='C')
|
||||||
try:
|
try:
|
||||||
output = subprocess.check_output(['file', target],
|
# -b: do not prepend filenames to output lines (brief mode)
|
||||||
|
output = subprocess.check_output(['file', '-b', target],
|
||||||
stderr=subprocess.DEVNULL,
|
stderr=subprocess.DEVNULL,
|
||||||
encoding='latin-1')
|
env=env)
|
||||||
except (OSError, subprocess.CalledProcessError):
|
except (OSError, subprocess.CalledProcessError):
|
||||||
return default
|
return default
|
||||||
return (output or default)
|
if not output:
|
||||||
|
return default
|
||||||
|
# With the C locale, the output should be mostly ASCII-compatible.
|
||||||
|
# Decode from Latin-1 to prevent Unicode decode error.
|
||||||
|
return output.decode('latin-1')
|
||||||
|
|
||||||
### Information about the used architecture
|
### Information about the used architecture
|
||||||
|
|
||||||
|
@ -672,7 +680,7 @@ def architecture(executable=sys.executable, bits='', linkage=''):
|
||||||
linkage = l
|
linkage = l
|
||||||
return bits, linkage
|
return bits, linkage
|
||||||
|
|
||||||
if 'executable' not in fileout:
|
if 'executable' not in fileout and 'shared object' not in fileout:
|
||||||
# Format not supported
|
# Format not supported
|
||||||
return bits, linkage
|
return bits, linkage
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
Make :func:`platform.architecture` parsing of ``file`` command output more
|
||||||
|
reliable: add the ``-b`` option to the ``file`` command to omit the filename,
|
||||||
|
force the usage of the C locale, and search also the "shared object" pattern.
|
Loading…
Reference in New Issue