summaryrefslogtreecommitdiff
path: root/Lib/test
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-01-25 21:20:34 +0100
committerGitHub <noreply@github.com>2022-01-25 21:20:34 +0100
commit4a57fa296b92125e41220ecd201eb2e432b79fb0 (patch)
treefce4aff44239bf3cceec9326fc33756cd30e9764 /Lib/test
parent75d88b91e6b1320ae0511eaf72e860bea913a3eb (diff)
downloadcpython-git-4a57fa296b92125e41220ecd201eb2e432b79fb0.tar.gz
[3.10] bpo-45382: test.pythoninfo logs more Windows versions (GH-30891)
Add the following info to test.pythoninfo: * windows.ver: output of the shell "ver" command * windows.version and windows.version_caption: output of the "wmic os get Caption,Version /value" command. (cherry picked from commit b0898f4aa90d9397e23aef98a2d6b82445ee7455) * bpo-45382: test.pythoninfo: set wmic.exe encoding to OEM (GH-30890) (cherry picked from commit cef0a5458f254c2f8536b928dee25862ca90ffa6)
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/pythoninfo.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/Lib/test/pythoninfo.py b/Lib/test/pythoninfo.py
index 39ee9e1d76..8c8011b550 100644
--- a/Lib/test/pythoninfo.py
+++ b/Lib/test/pythoninfo.py
@@ -720,6 +720,48 @@ def collect_windows(info_add):
except (ImportError, AttributeError):
pass
+ import subprocess
+ try:
+ # When wmic.exe output is redirected to a pipe,
+ # it uses the OEM code page
+ proc = subprocess.Popen(["wmic", "os", "get", "Caption,Version", "/value"],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ encoding="oem",
+ text=True)
+ output, stderr = proc.communicate()
+ if proc.returncode:
+ output = ""
+ except OSError:
+ pass
+ else:
+ for line in output.splitlines():
+ line = line.strip()
+ if line.startswith('Caption='):
+ line = line.removeprefix('Caption=').strip()
+ if line:
+ info_add('windows.version_caption', line)
+ elif line.startswith('Version='):
+ line = line.removeprefix('Version=').strip()
+ if line:
+ info_add('windows.version', line)
+
+ try:
+ proc = subprocess.Popen(["ver"], shell=True,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ text=True)
+ output = proc.communicate()[0]
+ if proc.returncode:
+ output = ""
+ except OSError:
+ return
+ else:
+ output = output.strip()
+ line = output.splitlines()[0]
+ if line:
+ info_add('windows.ver', line)
+
def collect_fips(info_add):
try: