annotate Lib/platform.py @ 70817:dd775b1561ba

Fix markup.
author Georg Brandl <georg@python.org>
date Tue, 14 Jun 2011 21:09:55 +0200
parents e44b851d0a2b
children 0025ce38fbd0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
59522
fcfe324663a6 convert shebang lines: python -> python3
Benjamin Peterson <benjamin@python.org>
parents: 58782
diff changeset
1 #!/usr/bin/env python3
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
2
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
3 """ This module tries to retrieve as much platform-identifying data as
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
4 possible. It makes this information available via function APIs.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
5
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
6 If called from the command line, it prints the platform
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
7 information concatenated as single string to stdout. The output
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
8 format is useable as part of a filename.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
9
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
10 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
11 # This module is maintained by Marc-Andre Lemburg <mal@egenix.com>.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
12 # If you find problems, please submit bug reports/patches via the
56368
c9bd62efe6ce Merged revisions 75231 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52389
diff changeset
13 # Python bug tracker (http://bugs.python.org) and assign them to "lemburg".
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
14 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
15 # Still needed:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
16 # * more support for WinCE
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
17 # * support for MS-DOS (PythonDX ?)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
18 # * support for Amiga and other still unsupported platforms running Python
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
19 # * support for additional Linux distributions
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
20 #
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
21 # Many thanks to all those who helped adding platform-specific
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
22 # checks (in no particular order):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
23 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
24 # Charles G Waldman, David Arnold, Gordon McMillan, Ben Darnell,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
25 # Jeff Bauer, Cliff Crawford, Ivan Van Laningham, Josef
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
26 # Betancourt, Randall Hopper, Karl Putland, John Farrell, Greg
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
27 # Andruk, Just van Rossum, Thomas Heller, Mark R. Levinson, Mark
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
28 # Hammond, Bill Tutt, Hans Nowak, Uwe Zessin (OpenVMS support),
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
29 # Colin Kong, Trent Mick, Guido van Rossum, Anthony Baxter
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
30 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
31 # History:
35842
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
32 #
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
33 # <see CVS and SVN checkin messages for history>
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
34 #
55301
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
35 # 1.0.7 - added DEV_NULL
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
36 # 1.0.6 - added linux_distribution()
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
37 # 1.0.5 - fixed Java support to allow running the module on Jython
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
38 # 1.0.4 - added IronPython support
32383
27e712c8e1a3 Added normalization for Windows system name. Closes SF #945665.
Marc-André Lemburg <mal@egenix.com>
parents: 31969
diff changeset
39 # 1.0.3 - added normalization of Windows system name
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
40 # 1.0.2 - added more Windows support
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
41 # 1.0.1 - reformatted to make doc.py happy
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
42 # 1.0.0 - reformatted a bit and checked into Python CVS
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
43 # 0.8.0 - added sys.version parser and various new access
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
44 # APIs (python_version(), python_compiler(), etc.)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
45 # 0.7.2 - fixed architecture() to use sizeof(pointer) where available
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
46 # 0.7.1 - added support for Caldera OpenLinux
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
47 # 0.7.0 - some fixes for WinCE; untabified the source file
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
48 # 0.6.2 - support for OpenVMS - requires version 1.5.2-V006 or higher and
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
49 # vms_lib.getsyi() configured
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
50 # 0.6.1 - added code to prevent 'uname -p' on platforms which are
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
51 # known not to support it
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
52 # 0.6.0 - fixed win32_ver() to hopefully work on Win95,98,NT and Win2k;
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
53 # did some cleanup of the interfaces - some APIs have changed
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
54 # 0.5.5 - fixed another type in the MacOS code... should have
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
55 # used more coffee today ;-)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
56 # 0.5.4 - fixed a few typos in the MacOS code
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
57 # 0.5.3 - added experimental MacOS support; added better popen()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
58 # workarounds in _syscmd_ver() -- still not 100% elegant
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
59 # though
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
60 # 0.5.2 - fixed uname() to return '' instead of 'unknown' in all
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
61 # return values (the system uname command tends to return
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
62 # 'unknown' instead of just leaving the field emtpy)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
63 # 0.5.1 - included code for slackware dist; added exception handlers
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
64 # to cover up situations where platforms don't have os.popen
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
65 # (e.g. Mac) or fail on socket.gethostname(); fixed libc
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
66 # detection RE
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
67 # 0.5.0 - changed the API names referring to system commands to *syscmd*;
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
68 # added java_ver(); made syscmd_ver() a private
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
69 # API (was system_ver() in previous versions) -- use uname()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
70 # instead; extended the win32_ver() to also return processor
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
71 # type information
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
72 # 0.4.0 - added win32_ver() and modified the platform() output for WinXX
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
73 # 0.3.4 - fixed a bug in _follow_symlinks()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
74 # 0.3.3 - fixed popen() and "file" command invokation bugs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
75 # 0.3.2 - added architecture() API and support for it in platform()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
76 # 0.3.1 - fixed syscmd_ver() RE to support Windows NT
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
77 # 0.3.0 - added system alias support
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
78 # 0.2.3 - removed 'wince' again... oh well.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
79 # 0.2.2 - added 'wince' to syscmd_ver() supported platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
80 # 0.2.1 - added cache logic and changed the platform string format
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
81 # 0.2.0 - changed the API to use functions instead of module globals
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
82 # since some action take too long to be run on module import
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
83 # 0.1.0 - first release
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
84 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
85 # You can always get the latest version of this module at:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
86 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
87 # http://www.egenix.com/files/python/platform.py
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
88 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
89 # If that URL should fail, try contacting the author.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
90
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
91 __copyright__ = """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
92 Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com
58219
aadfc31b3f14 Merged revisions 77389 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56368
diff changeset
93 Copyright (c) 2000-2010, eGenix.com Software GmbH; mailto:info@egenix.com
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
94
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
95 Permission to use, copy, modify, and distribute this software and its
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
96 documentation for any purpose and without fee or royalty is hereby granted,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
97 provided that the above copyright notice appear in all copies and that
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
98 both that copyright notice and this permission notice appear in
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
99 supporting documentation or portions thereof, including modifications,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
100 that you make.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
101
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
102 EGENIX.COM SOFTWARE GMBH DISCLAIMS ALL WARRANTIES WITH REGARD TO
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
103 THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
104 FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
105 INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
106 FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
107 NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
108 WITH THE USE OR PERFORMANCE OF THIS SOFTWARE !
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
109
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
110 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
111
55301
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
112 __version__ = '1.0.7'
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
113
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
114 import sys, os, re
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
115
55301
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
116 ### Globals & Constants
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
117
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
118 # Determine the platform's /dev/null device
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
119 try:
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
120 DEV_NULL = os.devnull
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
121 except AttributeError:
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
122 # os.devnull was added in Python 2.4, so emulate it for earlier
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
123 # Python versions
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
124 if sys.platform in ('dos','win32','win16','os2'):
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
125 # Use the old CP/M NUL as device name
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
126 DEV_NULL = 'NUL'
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
127 else:
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
128 # Standard Unix uses /dev/null
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
129 DEV_NULL = '/dev/null'
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
130
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
131 ### Platform specific APIs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
132
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
133 _libc_search = re.compile(r'(__libc_init)'
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
134 '|'
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
135 '(GLIBC_([0-9.]+))'
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
136 '|'
48769
83b2d07b475b #2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents: 48324
diff changeset
137 '(libc(_\w+)?\.so(?:\.(\d[0-9.]*))?)', re.ASCII)
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
138
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
139 def libc_ver(executable=sys.executable,lib='',version='',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
140
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
141 chunksize=2048):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
142
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
143 """ Tries to determine the libc version that the file executable
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
144 (which defaults to the Python interpreter) is linked against.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
145
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
146 Returns a tuple of strings (lib,version) which default to the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
147 given parameters in case the lookup fails.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
148
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
149 Note that the function has intimate knowledge of how different
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
150 libc versions add symbols to the executable and thus is probably
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
151 only useable for executables compiled using gcc.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
152
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
153 The file is read and scanned in chunks of chunksize bytes.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
154
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
155 """
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
156 if hasattr(os.path, 'realpath'):
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
157 # Python 2.2 introduced os.path.realpath(); it is used
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
158 # here to work around problems with Cygwin not being
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
159 # able to open symlinks for reading
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
160 executable = os.path.realpath(executable)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
161 f = open(executable,'rb')
41982
ef09cb011959 Fix libc_ver(): libc_ver() was reading sys.executable
Walter Dörwald <walter@livinglogic.de>
parents: 41480
diff changeset
162 binary = f.read(chunksize).decode('latin-1')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
163 pos = 0
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
164 while 1:
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
165 m = _libc_search.search(binary,pos)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
166 if not m:
41982
ef09cb011959 Fix libc_ver(): libc_ver() was reading sys.executable
Walter Dörwald <walter@livinglogic.de>
parents: 41480
diff changeset
167 binary = f.read(chunksize).decode('latin-1')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
168 if not binary:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
169 break
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
170 pos = 0
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
171 continue
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
172 libcinit,glibc,glibcversion,so,threads,soversion = m.groups()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
173 if libcinit and not lib:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
174 lib = 'libc'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
175 elif glibc:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
176 if lib != 'glibc':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
177 lib = 'glibc'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
178 version = glibcversion
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
179 elif glibcversion > version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
180 version = glibcversion
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
181 elif so:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
182 if lib != 'glibc':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
183 lib = 'libc'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
184 if soversion > version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
185 version = soversion
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
186 if threads and version[-len(threads):] != threads:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
187 version = version + threads
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
188 pos = m.end()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
189 f.close()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
190 return lib,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
191
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
192 def _dist_try_harder(distname,version,id):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
193
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
194 """ Tries some special tricks to get the distribution
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
195 information in case the default method fails.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
196
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
197 Currently supports older SuSE Linux, Caldera OpenLinux and
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
198 Slackware Linux distributions.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
199
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
200 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
201 if os.path.exists('/var/adm/inst-log/info'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
202 # SuSE Linux stores distribution information in that file
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
203 distname = 'SuSE'
64405
06e5fd4959e8 Use a context manager for some file objects.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 63954
diff changeset
204 for line in open('/var/adm/inst-log/info'):
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
205 tv = line.split()
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
206 if len(tv) == 2:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
207 tag,value = tv
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
208 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
209 continue
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
210 if tag == 'MIN_DIST_VERSION':
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
211 version = value.strip()
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
212 elif tag == 'DIST_IDENT':
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
213 values = value.split('-')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
214 id = values[2]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
215 return distname,version,id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
216
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
217 if os.path.exists('/etc/.installed'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
218 # Caldera OpenLinux has some infos in that file (thanks to Colin Kong)
64405
06e5fd4959e8 Use a context manager for some file objects.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 63954
diff changeset
219 for line in open('/etc/.installed'):
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
220 pkg = line.split('-')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
221 if len(pkg) >= 2 and pkg[0] == 'OpenLinux':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
222 # XXX does Caldera support non Intel platforms ? If yes,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
223 # where can we find the needed id ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
224 return 'OpenLinux',pkg[1],id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
225
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
226 if os.path.isdir('/usr/lib/setup'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
227 # Check for slackware verson tag file (thanks to Greg Andruk)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
228 verfiles = os.listdir('/usr/lib/setup')
31969
0c76a9e5c838 Using reversed() is not compatible with Python 1.5.2.
Guido van Rossum <guido@python.org>
parents: 31819
diff changeset
229 for n in range(len(verfiles)-1, -1, -1):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
230 if verfiles[n][:14] != 'slack-version-':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
231 del verfiles[n]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
232 if verfiles:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
233 verfiles.sort()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
234 distname = 'slackware'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
235 version = verfiles[-1][14:]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
236 return distname,version,id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
237
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
238 return distname,version,id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
239
48769
83b2d07b475b #2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents: 48324
diff changeset
240 _release_filename = re.compile(r'(\w+)[-_](release|version)', re.ASCII)
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
241 _lsb_release_version = re.compile(r'(.+)'
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
242 ' release '
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
243 '([\d.]+)'
48769
83b2d07b475b #2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents: 48324
diff changeset
244 '[^(]*(?:\((.+)\))?', re.ASCII)
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
245 _release_version = re.compile(r'([^0-9]+)'
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
246 '(?: release )?'
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
247 '([\d.]+)'
48769
83b2d07b475b #2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents: 48324
diff changeset
248 '[^(]*(?:\((.+)\))?', re.ASCII)
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
249
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
250 # See also http://www.novell.com/coolsolutions/feature/11251.html
40742
f1701ba2452b Merged revisions 53538-53622 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
251 # and http://linuxmafia.com/faq/Admin/release-files.html
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
252 # and http://data.linux-ntfs.org/rpm/whichrpm
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
253 # and http://www.die.net/doc/linux/man/man1/lsb_release.1.html
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
254
45773
832c820e9d14 Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44508
diff changeset
255 _supported_dists = (
832c820e9d14 Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44508
diff changeset
256 'SuSE', 'debian', 'fedora', 'redhat', 'centos',
832c820e9d14 Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44508
diff changeset
257 'mandrake', 'mandriva', 'rocks', 'slackware', 'yellowdog', 'gentoo',
832c820e9d14 Merged revisions 61239-61249,61252-61257,61260-61264,61269-61275,61278-61279,61285-61286,61288-61290,61298,61303-61305,61312-61314,61317,61329,61332,61344,61350-61351,61363-61376,61378-61379,61382-61383,61387-61388,61392,61395-61396,61402-61403 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44508
diff changeset
258 'UnitedLinux', 'turbolinux')
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
259
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
260 def _parse_release_file(firstline):
40742
f1701ba2452b Merged revisions 53538-53622 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
261
58483
6a0570ee2366 Merged revisions 77737 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58219
diff changeset
262 # Default to empty 'version' and 'id' strings. Both defaults are used
6a0570ee2366 Merged revisions 77737 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58219
diff changeset
263 # when 'firstline' is empty. 'id' defaults to empty when an id can not
6a0570ee2366 Merged revisions 77737 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58219
diff changeset
264 # be deduced.
6a0570ee2366 Merged revisions 77737 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58219
diff changeset
265 version = ''
6a0570ee2366 Merged revisions 77737 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58219
diff changeset
266 id = ''
6a0570ee2366 Merged revisions 77737 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 58219
diff changeset
267
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
268 # Parse the first line
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
269 m = _lsb_release_version.match(firstline)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
270 if m is not None:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
271 # LSB format: "distro release x.x (codename)"
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
272 return tuple(m.groups())
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
273
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
274 # Pre-LSB format: "distro x.x (codename)"
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
275 m = _release_version.match(firstline)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
276 if m is not None:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
277 return tuple(m.groups())
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
278
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
279 # Unkown format... take the first two words
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
280 l = firstline.strip().split()
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
281 if l:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
282 version = l[0]
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
283 if len(l) > 1:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
284 id = l[1]
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
285 return '', version, id
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
286
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
287 def linux_distribution(distname='', version='', id='',
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
288
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
289 supported_dists=_supported_dists,
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
290 full_distribution_name=1):
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
291
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
292 """ Tries to determine the name of the Linux OS distribution name.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
293
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
294 The function first looks for a distribution release file in
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
295 /etc and then reverts to _dist_try_harder() in case no
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
296 suitable files are found.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
297
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
298 supported_dists may be given to define the set of Linux
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
299 distributions to look for. It defaults to a list of currently
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
300 supported Linux distributions identified by their release file
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
301 name.
35842
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
302
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
303 If full_distribution_name is true (default), the full
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
304 distribution read from the OS is returned. Otherwise the short
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
305 name taken from supported_dists is used.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
306
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
307 Returns a tuple (distname,version,id) which default to the
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
308 args given as parameters.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
309
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
310 """
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
311 try:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
312 etc = os.listdir('/etc')
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
313 except os.error:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
314 # Probably not a Unix system
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
315 return distname,version,id
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
316 etc.sort()
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
317 for file in etc:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
318 m = _release_filename.match(file)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
319 if m is not None:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
320 _distname,dummy = m.groups()
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
321 if _distname in supported_dists:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
322 distname = _distname
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
323 break
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
324 else:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
325 return _dist_try_harder(distname,version,id)
40742
f1701ba2452b Merged revisions 53538-53622 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
326
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
327 # Read the first line
64405
06e5fd4959e8 Use a context manager for some file objects.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 63954
diff changeset
328 with open('/etc/'+file, 'r') as f:
06e5fd4959e8 Use a context manager for some file objects.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 63954
diff changeset
329 firstline = f.readline()
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
330 _distname, _version, _id = _parse_release_file(firstline)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
331
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
332 if _distname and full_distribution_name:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
333 distname = _distname
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
334 if _version:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
335 version = _version
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
336 if _id:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
337 id = _id
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
338 return distname, version, id
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
339
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
340 # To maintain backwards compatibility:
40742
f1701ba2452b Merged revisions 53538-53622 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
341
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
342 def dist(distname='',version='',id='',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
343
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
344 supported_dists=_supported_dists):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
345
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
346 """ Tries to determine the name of the Linux OS distribution name.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
347
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
348 The function first looks for a distribution release file in
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
349 /etc and then reverts to _dist_try_harder() in case no
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
350 suitable files are found.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
351
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
352 Returns a tuple (distname,version,id) which default to the
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
353 args given as parameters.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
354
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
355 """
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
356 return linux_distribution(distname, version, id,
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
357 supported_dists=supported_dists,
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
358 full_distribution_name=0)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
359
68679
1dc52ecb8949 Issue #11459: A `bufsize` value of 0 in subprocess.Popen() really creates
Antoine Pitrou <solipsis@pitrou.net>
parents: 68585
diff changeset
360 def popen(cmd, mode='r', bufsize=-1):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
361
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
362 """ Portable popen() interface.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
363 """
70323
e44b851d0a2b Issue #11377: platform.popen() emits a DeprecationWarning
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69830
diff changeset
364 import warnings
e44b851d0a2b Issue #11377: platform.popen() emits a DeprecationWarning
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69830
diff changeset
365 warnings.warn('use os.popen instead', DeprecationWarning, stacklevel=2)
68215
20a5a08c3b6c Issue #11377: Deprecate platform.popen() and reimplement it with os.popen().
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64405
diff changeset
366 return os.popen(cmd, mode, bufsize)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
367
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
368 def _norm_version(version, build=''):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
369
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
370 """ Normalize the version and build strings and return a single
35898
d72db82a70cd Fix typo.
Walter Dörwald <walter@livinglogic.de>
parents: 35842
diff changeset
371 version string using the format major.minor.build (or patchlevel).
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
372 """
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
373 l = version.split('.')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
374 if build:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
375 l.append(build)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
376 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
377 ints = map(int,l)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
378 except ValueError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
379 strings = l
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
380 else:
43034
8ccf6f4c7f12 Try to get test_pep352 and maybe test_platform to work on a Windows buildbot
Neal Norwitz <nnorwitz@gmail.com>
parents: 43020
diff changeset
381 strings = list(map(str,ints))
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
382 version = '.'.join(strings[:3])
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
383 return version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
384
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
385 _ver_output = re.compile(r'(?:([\w ]+) ([\w.]+) '
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
386 '.*'
55301
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
387 '\[.* ([\d.]+)\])')
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
388
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
389 # Examples of VER command output:
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
390 #
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
391 # Windows 2000: Microsoft Windows 2000 [Version 5.00.2195]
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
392 # Windows XP: Microsoft Windows XP [Version 5.1.2600]
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
393 # Windows Vista: Microsoft Windows [Version 6.0.6002]
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
394 #
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
395 # Note that the "Version" string gets localized on different
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
396 # Windows versions.
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
397
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
398 def _syscmd_ver(system='', release='', version='',
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
399
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
400 supported_platforms=('win32','win16','dos','os2')):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
401
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
402 """ Tries to figure out the OS version used and returns
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
403 a tuple (system,release,version).
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
404
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
405 It uses the "ver" shell command for this which is known
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
406 to exists on Windows, DOS and OS/2. XXX Others too ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
407
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
408 In case this fails, the given parameters are used as
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
409 defaults.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
410
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
411 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
412 if sys.platform not in supported_platforms:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
413 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
414
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
415 # Try some common cmd strings
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
416 for cmd in ('ver','command /c ver','cmd /c ver'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
417 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
418 pipe = popen(cmd)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
419 info = pipe.read()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
420 if pipe.close():
43020
907a45df1295 Raise statement normalization in Lib/.
Collin Winter <collinw@gmail.com>
parents: 42084
diff changeset
421 raise os.error('command failed')
68585
bf94b6a73fc8 #11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68275
diff changeset
422 # XXX How can I suppress shell errors from being written
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
423 # to stderr ?
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 39575
diff changeset
424 except os.error as why:
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
425 #print 'Command %s failed: %s' % (cmd,why)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
426 continue
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 39575
diff changeset
427 except IOError as why:
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
428 #print 'Command %s failed: %s' % (cmd,why)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
429 continue
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
430 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
431 break
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
432 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
433 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
434
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
435 # Parse the output
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
436 info = info.strip()
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
437 m = _ver_output.match(info)
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
438 if m is not None:
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
439 system,release,version = m.groups()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
440 # Strip trailing dots from version and release
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
441 if release[-1] == '.':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
442 release = release[:-1]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
443 if version[-1] == '.':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
444 version = version[:-1]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
445 # Normalize the version and build strings (eliminating additional
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
446 # zeros)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
447 version = _norm_version(version)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
448 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
449
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
450 def _win32_getvalue(key,name,default=''):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
451
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
452 """ Read a value for name from the registry key.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
453
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
454 In case this fails, default is returned.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
455
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
456 """
45969
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
457 try:
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
458 # Use win32api if available
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
459 from win32api import RegQueryValueEx
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
460 except ImportError:
47254
1546c1fb8f82 #2879: rename _winreg to winreg.
Georg Brandl <georg@python.org>
parents: 46745
diff changeset
461 # On Python 2.0 and later, emulate using winreg
1546c1fb8f82 #2879: rename _winreg to winreg.
Georg Brandl <georg@python.org>
parents: 46745
diff changeset
462 import winreg
1546c1fb8f82 #2879: rename _winreg to winreg.
Georg Brandl <georg@python.org>
parents: 46745
diff changeset
463 RegQueryValueEx = winreg.QueryValueEx
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
464 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
465 return RegQueryValueEx(key,name)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
466 except:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
467 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
468
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
469 def win32_ver(release='',version='',csd='',ptype=''):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
470
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
471 """ Get additional version information from the Windows Registry
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
472 and return a tuple (version,csd,ptype) referring to version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
473 number, CSD level and OS type (multi/single
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
474 processor).
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
475
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
476 As a hint: ptype returns 'Uniprocessor Free' on single
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
477 processor NT machines and 'Multiprocessor Free' on multi
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
478 processor machines. The 'Free' refers to the OS version being
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
479 free of debugging code. It could also state 'Checked' which
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
480 means the OS version uses debugging code, i.e. code that
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
481 checks arguments, ranges, etc. (Thomas Heller).
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
482
45969
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
483 Note: this function works best with Mark Hammond's win32
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
484 package installed, but also on Python 2.3 and later. It
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
485 obviously only runs on Win32 compatible platforms.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
486
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
487 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
488 # XXX Is there any way to find out the processor type on WinXX ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
489 # XXX Is win32 available on Windows CE ?
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
490 #
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
491 # Adapted from code posted by Karl Putland to comp.lang.python.
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
492 #
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
493 # The mappings between reg. values and release names can be found
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
494 # here: http://msdn.microsoft.com/library/en-us/sysinfo/base/osversioninfo_str.asp
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
495
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
496 # Import the needed APIs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
497 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
498 import win32api
45969
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
499 from win32api import RegQueryValueEx, RegOpenKeyEx, \
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
500 RegCloseKey, GetVersionEx
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
501 from win32con import HKEY_LOCAL_MACHINE, VER_PLATFORM_WIN32_NT, \
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
502 VER_PLATFORM_WIN32_WINDOWS, VER_NT_WORKSTATION
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
503 except ImportError:
45969
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
504 # Emulate the win32api module using Python APIs
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
505 try:
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
506 sys.getwindowsversion
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
507 except AttributeError:
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
508 # No emulation possible, so return the defaults...
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
509 return release,version,csd,ptype
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
510 else:
47254
1546c1fb8f82 #2879: rename _winreg to winreg.
Georg Brandl <georg@python.org>
parents: 46745
diff changeset
511 # Emulation using winreg (added in Python 2.0) and
45969
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
512 # sys.getwindowsversion() (added in Python 2.3)
47254
1546c1fb8f82 #2879: rename _winreg to winreg.
Georg Brandl <georg@python.org>
parents: 46745
diff changeset
513 import winreg
45969
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
514 GetVersionEx = sys.getwindowsversion
47254
1546c1fb8f82 #2879: rename _winreg to winreg.
Georg Brandl <georg@python.org>
parents: 46745
diff changeset
515 RegQueryValueEx = winreg.QueryValueEx
1546c1fb8f82 #2879: rename _winreg to winreg.
Georg Brandl <georg@python.org>
parents: 46745
diff changeset
516 RegOpenKeyEx = winreg.OpenKeyEx
1546c1fb8f82 #2879: rename _winreg to winreg.
Georg Brandl <georg@python.org>
parents: 46745
diff changeset
517 RegCloseKey = winreg.CloseKey
1546c1fb8f82 #2879: rename _winreg to winreg.
Georg Brandl <georg@python.org>
parents: 46745
diff changeset
518 HKEY_LOCAL_MACHINE = winreg.HKEY_LOCAL_MACHINE
45969
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
519 VER_PLATFORM_WIN32_WINDOWS = 1
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
520 VER_PLATFORM_WIN32_NT = 2
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
521 VER_NT_WORKSTATION = 1
61314
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
522 VER_NT_SERVER = 3
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
523 REG_SZ = 1
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
524
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
525 # Find out the registry key and some general version infos
61314
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
526 winver = GetVersionEx()
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
527 maj,min,buildno,plat,csd = winver
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
528 version = '%i.%i.%i' % (maj,min,buildno & 0xFFFF)
61314
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
529 if hasattr(winver, "service_pack"):
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
530 if winver.service_pack != "":
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
531 csd = 'SP%s' % winver.service_pack_major
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
532 else:
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
533 if csd[:13] == 'Service Pack ':
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
534 csd = 'SP' + csd[13:]
55301
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
535
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
536 if plat == VER_PLATFORM_WIN32_WINDOWS:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
537 regkey = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
538 # Try to guess the release name
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
539 if maj == 4:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
540 if min == 0:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
541 release = '95'
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
542 elif min == 10:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
543 release = '98'
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
544 elif min == 90:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
545 release = 'Me'
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
546 else:
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
547 release = 'postMe'
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
548 elif maj == 5:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
549 release = '2000'
55301
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
550
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
551 elif plat == VER_PLATFORM_WIN32_NT:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
552 regkey = 'SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
553 if maj <= 4:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
554 release = 'NT'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
555 elif maj == 5:
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
556 if min == 0:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
557 release = '2000'
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
558 elif min == 1:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
559 release = 'XP'
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
560 elif min == 2:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
561 release = '2003Server'
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
562 else:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
563 release = 'post2003'
42084
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
564 elif maj == 6:
61314
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
565 if hasattr(winver, "product_type"):
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
566 product_type = winver.product_type
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
567 else:
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
568 product_type = VER_NT_WORKSTATION
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
569 # Without an OSVERSIONINFOEX capable sys.getwindowsversion(),
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
570 # or help from the registry, we cannot properly identify
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
571 # non-workstation versions.
45969
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
572 try:
61314
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
573 key = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey)
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
574 name, type = RegQueryValueEx(key, "ProductName")
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
575 # Discard any type that isn't REG_SZ
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
576 if type == REG_SZ and name.find("Server") != -1:
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
577 product_type = VER_NT_SERVER
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
578 except WindowsError:
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
579 # Use default of VER_NT_WORKSTATION
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
580 pass
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
581
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
582 if min == 0:
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
583 if product_type == VER_NT_WORKSTATION:
42084
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
584 release = 'Vista'
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
585 else:
61314
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
586 release = '2008Server'
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
587 elif min == 1:
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
588 if product_type == VER_NT_WORKSTATION:
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
589 release = '7'
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
590 else:
39a2be4127dd Merged revisions 80859 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 58784
diff changeset
591 release = '2008ServerR2'
42084
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
592 else:
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
593 release = 'post2008Server'
55301
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
594
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
595 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
596 if not release:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
597 # E.g. Win3.1 with win32s
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
598 release = '%i.%i' % (maj,min)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
599 return release,version,csd,ptype
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
600
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
601 # Open the registry key
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
602 try:
45969
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
603 keyCurVer = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
604 # Get a value to make sure the key exists...
45969
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
605 RegQueryValueEx(keyCurVer, 'SystemRoot')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
606 except:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
607 return release,version,csd,ptype
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
608
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
609 # Parse values
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
610 #subversion = _win32_getvalue(keyCurVer,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
611 # 'SubVersionNumber',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
612 # ('',1))[0]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
613 #if subversion:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
614 # release = release + subversion # 95a, 95b, etc.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
615 build = _win32_getvalue(keyCurVer,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
616 'CurrentBuildNumber',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
617 ('',1))[0]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
618 ptype = _win32_getvalue(keyCurVer,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
619 'CurrentType',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
620 (ptype,1))[0]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
621
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
622 # Normalize version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
623 version = _norm_version(version,build)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
624
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
625 # Close key
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
626 RegCloseKey(keyCurVer)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
627 return release,version,csd,ptype
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
628
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
629 def _mac_ver_lookup(selectors,default=None):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
630
47376
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents: 47254
diff changeset
631 from _gestalt import gestalt
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
632 l = []
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
633 append = l.append
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
634 for selector in selectors:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
635 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
636 append(gestalt(selector))
47376
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents: 47254
diff changeset
637 except (RuntimeError, OSError):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
638 append(default)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
639 return l
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
640
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
641 def _bcd2str(bcd):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
642
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
643 return hex(bcd)[2:]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
644
63157
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
645 def _mac_ver_gestalt():
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
646 """
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
647 Thanks to Mark R. Levinson for mailing documentation links and
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
648 code examples for this function. Documentation for the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
649 gestalt() API is available online at:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
650
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
651 http://www.rgaros.nl/gestalt/
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
652 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
653 # Check whether the version info module is available
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
654 try:
47376
aea3c5543d43 add the gestalt module back as _gestalt
Benjamin Peterson <benjamin@python.org>
parents: 47254
diff changeset
655 import _gestalt
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
656 except ImportError:
63157
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
657 return None
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
658 # Get the infos
58784
937eb0fe1f9c Merged revisions 78058 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 58483
diff changeset
659 sysv, sysa = _mac_ver_lookup(('sysv','sysa'))
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
660 # Decode the infos
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
661 if sysv:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
662 major = (sysv & 0xFF00) >> 8
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
663 minor = (sysv & 0x00F0) >> 4
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
664 patch = (sysv & 0x000F)
46745
f2d771f370bd Merged revisions 62805,62811,62841-62842,62848-62849,62853-62854 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45969
diff changeset
665
f2d771f370bd Merged revisions 62805,62811,62841-62842,62848-62849,62853-62854 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45969
diff changeset
666 if (major, minor) >= (10, 4):
f2d771f370bd Merged revisions 62805,62811,62841-62842,62848-62849,62853-62854 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45969
diff changeset
667 # the 'sysv' gestald cannot return patchlevels
f2d771f370bd Merged revisions 62805,62811,62841-62842,62848-62849,62853-62854 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45969
diff changeset
668 # higher than 9. Apple introduced 3 new
f2d771f370bd Merged revisions 62805,62811,62841-62842,62848-62849,62853-62854 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45969
diff changeset
669 # gestalt codes in 10.4 to deal with this
f2d771f370bd Merged revisions 62805,62811,62841-62842,62848-62849,62853-62854 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45969
diff changeset
670 # issue (needed because patch levels can
f2d771f370bd Merged revisions 62805,62811,62841-62842,62848-62849,62853-62854 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45969
diff changeset
671 # run higher than 9, such as 10.4.11)
f2d771f370bd Merged revisions 62805,62811,62841-62842,62848-62849,62853-62854 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45969
diff changeset
672 major,minor,patch = _mac_ver_lookup(('sys1','sys2','sys3'))
f2d771f370bd Merged revisions 62805,62811,62841-62842,62848-62849,62853-62854 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45969
diff changeset
673 release = '%i.%i.%i' %(major, minor, patch)
f2d771f370bd Merged revisions 62805,62811,62841-62842,62848-62849,62853-62854 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45969
diff changeset
674 else:
f2d771f370bd Merged revisions 62805,62811,62841-62842,62848-62849,62853-62854 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45969
diff changeset
675 release = '%s.%i.%i' % (_bcd2str(major),minor,patch)
47378
1d29bfa27368 Merged revisions 63460,63464 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47376
diff changeset
676
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
677 if sysa:
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
678 machine = {0x1: '68k',
37879
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36210
diff changeset
679 0x2: 'PowerPC',
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 36210
diff changeset
680 0xa: 'i386'}.get(sysa,'')
63157
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
681
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
682 return release,versioninfo,machine
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
683
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
684 def _mac_ver_xml():
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
685 fn = '/System/Library/CoreServices/SystemVersion.plist'
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
686 if not os.path.exists(fn):
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
687 return None
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
688
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
689 try:
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
690 import plistlib
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
691 except ImportError:
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
692 return None
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
693
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
694 pl = plistlib.readPlist(fn)
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
695 release = pl['ProductVersion']
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
696 versioninfo=('', '', '')
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
697 machine = os.uname()[4]
63660
6945416c8d04 Merged revisions 83644 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 63443
diff changeset
698 if machine in ('ppc', 'Power Macintosh'):
63157
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
699 # for compatibility with the gestalt based code
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
700 machine = 'PowerPC'
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
701
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
702 return release,versioninfo,machine
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
703
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
704
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
705 def mac_ver(release='',versioninfo=('','',''),machine=''):
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
706
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
707 """ Get MacOS version information and return it as tuple (release,
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
708 versioninfo, machine) with versioninfo being a tuple (version,
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
709 dev_stage, non_release_version).
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
710
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
711 Entries which cannot be determined are set to the paramter values
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
712 which default to ''. All tuple entries are strings.
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
713 """
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
714
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
715 # First try reading the information from an XML file which should
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
716 # always be present
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
717 info = _mac_ver_xml()
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
718 if info is not None:
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
719 return info
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
720
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
721 # If that doesn't work for some reason fall back to reading the
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
722 # information using gestalt calls.
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
723 info = _mac_ver_gestalt()
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
724 if info is not None:
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
725 return info
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
726
183c5625e00b Merged revisions 83075 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61314
diff changeset
727 # If that also doesn't work return the default values
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
728 return release,versioninfo,machine
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
729
29657
5b105a950334 remove extra parameter from _java_getprop, remove duplicate imports
Neal Norwitz <nnorwitz@gmail.com>
parents: 28779
diff changeset
730 def _java_getprop(name,default):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
731
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
732 from java.lang import System
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
733 try:
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
734 value = System.getProperty(name)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
735 if value is None:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
736 return default
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
737 return value
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
738 except AttributeError:
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
739 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
740
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
741 def java_ver(release='',vendor='',vminfo=('','',''),osinfo=('','','')):
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
742
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
743 """ Version interface for Jython.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
744
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
745 Returns a tuple (release,vendor,vminfo,osinfo) with vminfo being
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
746 a tuple (vm_name,vm_release,vm_vendor) and osinfo being a
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
747 tuple (os_name,os_version,os_arch).
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
748
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
749 Values which cannot be determined are set to the defaults
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
750 given as parameters (which all default to '').
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
751
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
752 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
753 # Import the needed APIs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
754 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
755 import java.lang
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
756 except ImportError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
757 return release,vendor,vminfo,osinfo
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
758
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
759 vendor = _java_getprop('java.vendor', vendor)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
760 release = _java_getprop('java.version', release)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
761 vm_name, vm_release, vm_vendor = vminfo
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
762 vm_name = _java_getprop('java.vm.name', vm_name)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
763 vm_vendor = _java_getprop('java.vm.vendor', vm_vendor)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
764 vm_release = _java_getprop('java.vm.version', vm_release)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
765 vminfo = vm_name, vm_release, vm_vendor
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
766 os_name, os_version, os_arch = osinfo
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
767 os_arch = _java_getprop('java.os.arch', os_arch)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
768 os_name = _java_getprop('java.os.name', os_name)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
769 os_version = _java_getprop('java.os.version', os_version)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
770 osinfo = os_name, os_version, os_arch
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
771
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
772 return release, vendor, vminfo, osinfo
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
773
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
774 ### System name aliasing
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
775
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
776 def system_alias(system,release,version):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
777
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
778 """ Returns (system,release,version) aliased to common
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
779 marketing names used for some systems.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
780
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
781 It also does some reordering of the information in some cases
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
782 where it would otherwise cause confusion.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
783
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
784 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
785 if system == 'Rhapsody':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
786 # Apple's BSD derivative
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
787 # XXX How can we determine the marketing release number ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
788 return 'MacOS X Server',system+release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
789
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
790 elif system == 'SunOS':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
791 # Sun's OS
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
792 if release < '5':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
793 # These releases use the old name SunOS
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
794 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
795 # Modify release (marketing release = SunOS release - 3)
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
796 l = release.split('.')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
797 if l:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
798 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
799 major = int(l[0])
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
800 except ValueError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
801 pass
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
802 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
803 major = major - 3
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
804 l[0] = str(major)
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
805 release = '.'.join(l)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
806 if release < '6':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
807 system = 'Solaris'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
808 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
809 # XXX Whatever the new SunOS marketing name is...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
810 system = 'Solaris'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
811
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
812 elif system == 'IRIX64':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
813 # IRIX reports IRIX64 on platforms with 64-bit support; yet it
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
814 # is really a version and not a different platform, since 32-bit
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
815 # apps are also supported..
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
816 system = 'IRIX'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
817 if version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
818 version = version + ' (64bit)'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
819 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
820 version = '64bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
821
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
822 elif system in ('win32','win16'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
823 # In case one of the other tricks
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
824 system = 'Windows'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
825
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
826 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
827
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
828 ### Various internal helpers
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
829
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
830 def _platform(*args):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
831
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
832 """ Helper to format the platform string in a filename
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
833 compatible format e.g. "system-version-machine".
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
834 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
835 # Format the platform string
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
836 platform = '-'.join(x.strip() for x in filter(len, args))
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
837
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
838 # Cleanup some possible filename obstacles...
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
839 platform = platform.replace(' ','_')
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
840 platform = platform.replace('/','-')
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
841 platform = platform.replace('\\','-')
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
842 platform = platform.replace(':','-')
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
843 platform = platform.replace(';','-')
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
844 platform = platform.replace('"','-')
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
845 platform = platform.replace('(','-')
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
846 platform = platform.replace(')','-')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
847
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
848 # No need to report 'unknown' information...
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
849 platform = platform.replace('unknown','')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
850
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
851 # Fold '--'s and remove trailing '-'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
852 while 1:
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
853 cleaned = platform.replace('--','-')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
854 if cleaned == platform:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
855 break
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
856 platform = cleaned
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
857 while platform[-1] == '-':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
858 platform = platform[:-1]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
859
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
860 return platform
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
861
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
862 def _node(default=''):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
863
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
864 """ Helper to determine the node name of this machine.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
865 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
866 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
867 import socket
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
868 except ImportError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
869 # No sockets...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
870 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
871 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
872 return socket.gethostname()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
873 except socket.error:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
874 # Still not working...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
875 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
876
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
877 def _follow_symlinks(filepath):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
878
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
879 """ In case filepath is a symlink, follow it until a
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
880 real file is reached.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
881 """
44508
08138bc3c060 Fix bug introduced by r59746.
Georg Brandl <georg@python.org>
parents: 44498
diff changeset
882 filepath = os.path.abspath(filepath)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
883 while os.path.islink(filepath):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
884 filepath = os.path.normpath(
49014
94cc11ec7ec2 Merged revisions 66213 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 48959
diff changeset
885 os.path.join(os.path.dirname(filepath),os.readlink(filepath)))
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
886 return filepath
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
887
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
888 def _syscmd_uname(option,default=''):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
889
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
890 """ Interface to the system's uname command.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
891 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
892 if sys.platform in ('dos','win32','win16','os2'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
893 # XXX Others too ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
894 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
895 try:
55301
724dfeab3e9b Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 52389
diff changeset
896 f = os.popen('uname %s 2> %s' % (option, DEV_NULL))
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
897 except (AttributeError,os.error):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
898 return default
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
899 output = f.read().strip()
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
900 rc = f.close()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
901 if not output or rc:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
902 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
903 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
904 return output
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
905
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
906 def _syscmd_file(target,default=''):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
907
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
908 """ Interface to the system's file command.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
909
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
910 The function uses the -b option of the file command to have it
63954
913aa8a4304c Issue #9560: Use -b option of the file command in _syscmd_file()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 63659
diff changeset
911 omit the filename in its output. Follow the symlinks. It returns
913aa8a4304c Issue #9560: Use -b option of the file command in _syscmd_file()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 63659
diff changeset
912 default in case the command should fail.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
913
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
914 """
48926
925153225570 Merged revisions 66104 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 48769
diff changeset
915 if sys.platform in ('dos','win32','win16','os2'):
925153225570 Merged revisions 66104 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 48769
diff changeset
916 # XXX Others too ?
925153225570 Merged revisions 66104 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 48769
diff changeset
917 return default
60697
043f14304ded Revert r80167, it breaks build on many platforms
Victor Stinner <victor.stinner@haypocalc.com>
parents: 60674
diff changeset
918 target = _follow_symlinks(target).replace('"', '\\"')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
919 try:
63954
913aa8a4304c Issue #9560: Use -b option of the file command in _syscmd_file()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 63659
diff changeset
920 f = os.popen('file -b "%s" 2> %s' % (target, DEV_NULL))
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
921 except (AttributeError,os.error):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
922 return default
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
923 output = f.read().strip()
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
924 rc = f.close()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
925 if not output or rc:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
926 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
927 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
928 return output
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
929
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
930 ### Information about the used architecture
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
931
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
932 # Default values for architecture; non-empty strings override the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
933 # defaults given as parameters
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
934 _default_architecture = {
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
935 'win32': ('','WindowsPE'),
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
936 'win16': ('','Windows'),
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
937 'dos': ('','MSDOS'),
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
938 }
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
939
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
940 def architecture(executable=sys.executable,bits='',linkage=''):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
941
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
942 """ Queries the given executable (defaults to the Python interpreter
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
943 binary) for various architecture information.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
944
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
945 Returns a tuple (bits,linkage) which contains information about
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
946 the bit architecture and the linkage format used for the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
947 executable. Both values are returned as strings.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
948
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
949 Values that cannot be determined are returned as given by the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
950 parameter presets. If bits is given as '', the sizeof(pointer)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
951 (or sizeof(long) on Python version < 1.5.2) is used as
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
952 indicator for the supported pointer size.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
953
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
954 The function relies on the system's "file" command to do the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
955 actual work. This is available on most if not all Unix
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
956 platforms. On some non-Unix platforms where the "file" command
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
957 does not exist and the executable is set to the Python interpreter
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
958 binary defaults from _default_architecture are used.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
959
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
960 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
961 # Use the sizeof(pointer) as default number of bits if nothing
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
962 # else is given as default.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
963 if not bits:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
964 import struct
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
965 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
966 size = struct.calcsize('P')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
967 except struct.error:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
968 # Older installations can only query longs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
969 size = struct.calcsize('l')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
970 bits = str(size*8) + 'bit'
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
971
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
972 # Get data from the 'file' system command
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
973 if executable:
63954
913aa8a4304c Issue #9560: Use -b option of the file command in _syscmd_file()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 63659
diff changeset
974 fileout = _syscmd_file(executable, '')
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
975 else:
63954
913aa8a4304c Issue #9560: Use -b option of the file command in _syscmd_file()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 63659
diff changeset
976 fileout = ''
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
977
63954
913aa8a4304c Issue #9560: Use -b option of the file command in _syscmd_file()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 63659
diff changeset
978 if not fileout and \
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
979 executable == sys.executable:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
980 # "file" command did not return anything; we'll try to provide
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
981 # some sensible defaults then...
39575
63237fcefd99 Get rid of dict.has_key(). Boy this has a lot of repercussions!
Guido van Rossum <guido@python.org>
parents: 37879
diff changeset
982 if sys.platform in _default_architecture:
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
983 b,l = _default_architecture[sys.platform]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
984 if b:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
985 bits = b
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
986 if l:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
987 linkage = l
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
988 return bits,linkage
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
989
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
990 if 'executable' not in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
991 # Format not supported
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
992 return bits,linkage
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
993
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
994 # Bits
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
995 if '32-bit' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
996 bits = '32bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
997 elif 'N32' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
998 # On Irix only
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
999 bits = 'n32bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1000 elif '64-bit' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1001 bits = '64bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1002
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1003 # Linkage
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1004 if 'ELF' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1005 linkage = 'ELF'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1006 elif 'PE' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1007 # E.g. Windows uses this format
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1008 if 'Windows' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1009 linkage = 'WindowsPE'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1010 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1011 linkage = 'PE'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1012 elif 'COFF' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1013 linkage = 'COFF'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1014 elif 'MS-DOS' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1015 linkage = 'MSDOS'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1016 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1017 # XXX the A.OUT format also falls under this class...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1018 pass
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1019
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1020 return bits,linkage
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1021
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1022 ### Portable uname() interface
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1023
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1024 _uname_cache = None
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1025
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1026 def uname():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1027
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1028 """ Fairly portable uname interface. Returns a tuple
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1029 of strings (system,node,release,version,machine,processor)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1030 identifying the underlying platform.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1031
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1032 Note that unlike the os.uname function this also returns
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
1033 possible processor information as an additional tuple entry.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1034
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1035 Entries which cannot be determined are set to ''.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1036
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1037 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1038 global _uname_cache
48321
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1039 no_os_uname = 0
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1040
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1041 if _uname_cache is not None:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1042 return _uname_cache
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1043
48321
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1044 processor = ''
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1045
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1046 # Get some infos from the builtin os.uname API...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1047 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1048 system,node,release,version,machine = os.uname()
48321
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1049 except AttributeError:
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1050 no_os_uname = 1
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1051
63443
93b3ae63d2f3 Merged revisions 83371,83390 via svnmerge from
Georg Brandl <georg@python.org>
parents: 63157
diff changeset
1052 if no_os_uname or not list(filter(None, (system, node, release, version, machine))):
48321
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1053 # Hmm, no there is either no uname or uname has returned
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1054 #'unknowns'... we'll have to poke around the system then.
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1055 if no_os_uname:
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1056 system = sys.platform
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1057 release = ''
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1058 version = ''
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1059 node = _node()
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1060 machine = ''
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1061
48324
70d72a75ccf1 Merge error: platform.py would not import
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 48321
diff changeset
1062 use_syscmd_ver = 1
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1063
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1064 # Try win32_ver() on win32 platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1065 if system == 'win32':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1066 release,version,csd,ptype = win32_ver()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1067 if release and version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1068 use_syscmd_ver = 0
45969
28733ada4d03 Merged revisions 61672,61674,61676-61678,61681,61683-61684 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45773
diff changeset
1069 # Try to use the PROCESSOR_* environment variables
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1070 # available on Win XP and later; see
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1071 # http://support.microsoft.com/kb/888731 and
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1072 # http://www.geocities.com/rick_lively/MANUALS/ENV/MSWIN/PROCESSI.HTM
48321
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1073 if not machine:
59915
b7872b0e8ab2 Merged revisions 79294 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 59522
diff changeset
1074 # WOW64 processes mask the native architecture
b7872b0e8ab2 Merged revisions 79294 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 59522
diff changeset
1075 if "PROCESSOR_ARCHITEW6432" in os.environ:
b7872b0e8ab2 Merged revisions 79294 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 59522
diff changeset
1076 machine = os.environ.get("PROCESSOR_ARCHITEW6432", '')
b7872b0e8ab2 Merged revisions 79294 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 59522
diff changeset
1077 else:
b7872b0e8ab2 Merged revisions 79294 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents: 59522
diff changeset
1078 machine = os.environ.get('PROCESSOR_ARCHITECTURE', '')
48321
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1079 if not processor:
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1080 processor = os.environ.get('PROCESSOR_IDENTIFIER', machine)
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1081
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1082 # Try the 'ver' system command available on some
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1083 # platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1084 if use_syscmd_ver:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1085 system,release,version = _syscmd_ver(system)
32383
27e712c8e1a3 Added normalization for Windows system name. Closes SF #945665.
Marc-André Lemburg <mal@egenix.com>
parents: 31969
diff changeset
1086 # Normalize system to what win32_ver() normally returns
27e712c8e1a3 Added normalization for Windows system name. Closes SF #945665.
Marc-André Lemburg <mal@egenix.com>
parents: 31969
diff changeset
1087 # (_syscmd_ver() tends to return the vendor name as well)
27e712c8e1a3 Added normalization for Windows system name. Closes SF #945665.
Marc-André Lemburg <mal@egenix.com>
parents: 31969
diff changeset
1088 if system == 'Microsoft Windows':
27e712c8e1a3 Added normalization for Windows system name. Closes SF #945665.
Marc-André Lemburg <mal@egenix.com>
parents: 31969
diff changeset
1089 system = 'Windows'
42084
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
1090 elif system == 'Microsoft' and release == 'Windows':
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
1091 # Under Windows Vista and Windows Server 2008,
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
1092 # Microsoft changed the output of the ver command. The
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
1093 # release is no longer printed. This causes the
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
1094 # system and release to be misidentified.
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
1095 system = 'Windows'
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
1096 if '6.0' == version[:3]:
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
1097 release = 'Vista'
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
1098 else:
229c28cb9afb Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41982
diff changeset
1099 release = ''
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1100
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1101 # In case we still don't know anything useful, we'll try to
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1102 # help ourselves
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1103 if system in ('win32','win16'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1104 if not version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1105 if system == 'win32':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1106 version = '32bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1107 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1108 version = '16bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1109 system = 'Windows'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1110
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1111 elif system[:4] == 'java':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1112 release,vendor,vminfo,osinfo = java_ver()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1113 system = 'Java'
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
1114 version = ', '.join(vminfo)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1115 if not version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1116 version = vendor
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1117
48321
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1118 # System specific extensions
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1119 if system == 'OpenVMS':
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1120 # OpenVMS seems to have release and version mixed up
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1121 if not release or release == '0':
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1122 release = version
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1123 version = ''
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1124 # Get processor information
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1125 try:
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1126 import vms_lib
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1127 except ImportError:
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1128 pass
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1129 else:
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1130 csid, cpu_number = vms_lib.getsyi('SYI$_CPU',0)
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1131 if (cpu_number >= 128):
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1132 processor = 'Alpha'
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1133 else:
48321
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1134 processor = 'VAX'
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1135 if not processor:
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1136 # Get processor information from the uname system command
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1137 processor = _syscmd_uname('-p','')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1138
48321
f6726f32ef70 Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 47378
diff changeset
1139 #If any unknowns still exist, replace them with ''s, which are more portable
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1140 if system == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1141 system = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1142 if node == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1143 node = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1144 if release == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1145 release = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1146 if version == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1147 version = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1148 if machine == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1149 machine = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1150 if processor == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1151 processor = ''
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43034
diff changeset
1152
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43034
diff changeset
1153 # normalize name
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43034
diff changeset
1154 if system == 'Microsoft' and release == 'Windows':
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43034
diff changeset
1155 system = 'Windows'
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43034
diff changeset
1156 release = 'Vista'
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43034
diff changeset
1157
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1158 _uname_cache = system,node,release,version,machine,processor
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1159 return _uname_cache
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1160
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1161 ### Direct interfaces to some of the uname() return values
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1162
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1163 def system():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1164
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1165 """ Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1166
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1167 An empty string is returned if the value cannot be determined.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1168
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1169 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1170 return uname()[0]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1171
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1172 def node():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1173
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
1174 """ Returns the computer's network name (which may not be fully
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
1175 qualified)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1176
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1177 An empty string is returned if the value cannot be determined.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1178
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1179 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1180 return uname()[1]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1181
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1182 def release():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1183
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1184 """ Returns the system's release, e.g. '2.2.0' or 'NT'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1185
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1186 An empty string is returned if the value cannot be determined.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1187
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1188 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1189 return uname()[2]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1190
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1191 def version():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1192
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1193 """ Returns the system's release version, e.g. '#3 on degas'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1194
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1195 An empty string is returned if the value cannot be determined.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1196
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1197 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1198 return uname()[3]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1199
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1200 def machine():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1201
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1202 """ Returns the machine type, e.g. 'i386'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1203
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1204 An empty string is returned if the value cannot be determined.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1205
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1206 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1207 return uname()[4]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1208
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1209 def processor():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1210
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1211 """ Returns the (true) processor name, e.g. 'amdk6'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1212
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1213 An empty string is returned if the value cannot be
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1214 determined. Note that many platforms do not provide this
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1215 information or simply return the same value as for machine(),
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1216 e.g. NetBSD does this.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1217
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1218 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1219 return uname()[5]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1220
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1221 ### Various APIs for extracting information from sys.version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1222
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1223 _sys_version_parser = re.compile(
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1224 r'([\w.+]+)\s*'
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1225 '\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*'
48769
83b2d07b475b #2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents: 48324
diff changeset
1226 '\[([^\]]+)\]?', re.ASCII)
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1227
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1228 _ironpython_sys_version_parser = re.compile(
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1229 r'IronPython\s*'
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1230 '([\d\.]+)'
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1231 '(?: \(([\d\.]+)\))?'
48769
83b2d07b475b #2834: Change re module semantics, so that str and bytes mixing is forbidden,
Antoine Pitrou <solipsis@pitrou.net>
parents: 48324
diff changeset
1232 ' on (.NET [\d\.]+)', re.ASCII)
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1233
52389
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1234 _pypy_sys_version_parser = re.compile(
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1235 r'([\w.+]+)\s*'
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1236 '\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*'
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1237 '\[PyPy [^\]]+\]?')
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1238
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1239 _sys_version_cache = {}
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1240
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1241 def _sys_version(sys_version=None):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1242
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1243 """ Returns a parsed version of Python's sys.version as tuple
52365
475808698eaf Merged revisions 70628 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49587
diff changeset
1244 (name, version, branch, revision, buildno, builddate, compiler)
475808698eaf Merged revisions 70628 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49587
diff changeset
1245 referring to the Python implementation name, version, branch,
475808698eaf Merged revisions 70628 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49587
diff changeset
1246 revision, build number, build date/time as string and the compiler
475808698eaf Merged revisions 70628 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49587
diff changeset
1247 identification string.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1248
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1249 Note that unlike the Python sys.version, the returned value
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1250 for the Python version will always include the patchlevel (it
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1251 defaults to '.0').
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1252
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1253 The function returns empty strings for tuple entries that
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1254 cannot be determined.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1255
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1256 sys_version may be given to parse an alternative version
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1257 string, e.g. if the version was read from a different Python
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1258 interpreter.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1259
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1260 """
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1261 # Get the Python version
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1262 if sys_version is None:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1263 sys_version = sys.version
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1264
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1265 # Try the cache first
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1266 result = _sys_version_cache.get(sys_version, None)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1267 if result is not None:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1268 return result
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1269
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1270 # Parse it
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1271 if sys_version[:10] == 'IronPython':
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1272 # IronPython
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1273 name = 'IronPython'
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1274 match = _ironpython_sys_version_parser.match(sys_version)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1275 if match is None:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1276 raise ValueError(
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1277 'failed to parse IronPython sys.version: %s' %
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1278 repr(sys_version))
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1279 version, alt_version, compiler = match.groups()
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1280 buildno = ''
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1281 builddate = ''
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1282
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1283 elif sys.platform[:4] == 'java':
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1284 # Jython
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1285 name = 'Jython'
52389
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1286 match = _sys_version_parser.match(sys_version)
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1287 if match is None:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1288 raise ValueError(
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1289 'failed to parse Jython sys.version: %s' %
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1290 repr(sys_version))
52389
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1291 version, buildno, builddate, buildtime, _ = match.groups()
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1292 compiler = sys.platform
52389
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1293
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1294 elif "PyPy" in sys_version:
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1295 # PyPy
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1296 name = "PyPy"
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1297 match = _pypy_sys_version_parser.match(sys_version)
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1298 if match is None:
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1299 raise ValueError("failed to parse PyPy sys.version: %s" %
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1300 repr(sys_version))
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1301 version, buildno, builddate, buildtime = match.groups()
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1302 compiler = ""
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1303
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1304 else:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1305 # CPython
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1306 match = _sys_version_parser.match(sys_version)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1307 if match is None:
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1308 raise ValueError(
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1309 'failed to parse CPython sys.version: %s' %
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1310 repr(sys_version))
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1311 version, buildno, builddate, buildtime, compiler = \
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1312 match.groups()
52389
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1313 name = 'CPython'
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1314 builddate = builddate + ' ' + buildtime
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1315
68275
f3f8b39eaa1e Adapt platform and test_platform to the build identification changes.
Georg Brandl <georg@python.org>
parents: 63660
diff changeset
1316 if hasattr(sys, '_mercurial'):
f3f8b39eaa1e Adapt platform and test_platform to the build identification changes.
Georg Brandl <georg@python.org>
parents: 63660
diff changeset
1317 _, branch, revision = sys._mercurial
f3f8b39eaa1e Adapt platform and test_platform to the build identification changes.
Georg Brandl <georg@python.org>
parents: 63660
diff changeset
1318 elif hasattr(sys, 'subversion'):
52389
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1319 # sys.subversion was added in Python 2.5
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1320 _, branch, revision = sys.subversion
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1321 else:
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1322 branch = ''
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1323 revision = ''
d4e7470bd660 Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 52365
diff changeset
1324
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1325 # Add the patchlevel version if missing
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
1326 l = version.split('.')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1327 if len(l) == 2:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1328 l.append('0')
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
1329 version = '.'.join(l)
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1330
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1331 # Build and cache the result
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1332 result = (name, version, branch, revision, buildno, builddate, compiler)
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1333 _sys_version_cache[sys_version] = result
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1334 return result
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1335
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1336 def python_implementation():
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1337
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1338 """ Returns a string identifying the Python implementation.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1339
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1340 Currently, the following implementations are identified:
69828
7bf9d7ae6c94 #11985: update docstring of platform.python_implementation.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68679
diff changeset
1341 'CPython' (C implementation of Python),
7bf9d7ae6c94 #11985: update docstring of platform.python_implementation.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68679
diff changeset
1342 'IronPython' (.NET implementation of Python),
7bf9d7ae6c94 #11985: update docstring of platform.python_implementation.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68679
diff changeset
1343 'Jython' (Java implementation of Python),
7bf9d7ae6c94 #11985: update docstring of platform.python_implementation.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68679
diff changeset
1344 'PyPy' (Python implementation of Python).
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1345
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1346 """
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1347 return _sys_version()[0]
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1348
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1349 def python_version():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1350
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1351 """ Returns the Python version as string 'major.minor.patchlevel'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1352
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1353 Note that unlike the Python sys.version, the returned value
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1354 will always include the patchlevel (it defaults to 0).
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1355
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1356 """
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1357 return _sys_version()[1]
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1358
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1359 def python_version_tuple():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1360
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1361 """ Returns the Python version as tuple (major, minor, patchlevel)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1362 of strings.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1363
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1364 Note that unlike the Python sys.version, the returned value
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1365 will always include the patchlevel (it defaults to 0).
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1366
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1367 """
41480
99027c2b3fd2 Remove functions in string module that are also string methods. Also remove:
Neal Norwitz <nnorwitz@gmail.com>
parents: 40775
diff changeset
1368 return tuple(_sys_version()[1].split('.'))
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1369
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1370 def python_branch():
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1371
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1372 """ Returns a string identifying the Python implementation
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1373 branch.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1374
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1375 For CPython this is the Subversion branch from which the
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1376 Python binary was built.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1377
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1378 If not available, an empty string is returned.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1379
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1380 """
40742
f1701ba2452b Merged revisions 53538-53622 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40644
diff changeset
1381
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1382 return _sys_version()[2]
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1383
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1384 def python_revision():
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1385
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1386 """ Returns a string identifying the Python implementation
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1387 revision.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1388
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1389 For CPython this is the Subversion revision from which the
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1390 Python binary was built.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1391
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1392 If not available, an empty string is returned.
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1393
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1394 """
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1395 return _sys_version()[3]
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1396
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1397 def python_build():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1398
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1399 """ Returns a tuple (buildno, builddate) stating the Python
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1400 build number and date as strings.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1401
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1402 """
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1403 return _sys_version()[4:6]
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1404
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1405 def python_compiler():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1406
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1407 """ Returns a string identifying the compiler used for compiling
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1408 Python.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1409
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1410 """
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1411 return _sys_version()[6]
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1412
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1413 ### The Opus Magnum of platform strings :-)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1414
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
1415 _platform_cache = {}
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1416
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1417 def platform(aliased=0, terse=0):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1418
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1419 """ Returns a single string identifying the underlying platform
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1420 with as much useful information as possible (but no more :).
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1421
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1422 The output is intended to be human readable rather than
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1423 machine parseable. It may look different on different
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1424 platforms and this is intended.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1425
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1426 If "aliased" is true, the function will use aliases for
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1427 various platforms that report system names which differ from
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1428 their common names, e.g. SunOS will be reported as
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1429 Solaris. The system_alias() function is used to implement
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1430 this.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1431
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1432 Setting terse to true causes the function to return only the
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1433 absolute minimum information needed to identify the platform.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1434
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1435 """
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
1436 result = _platform_cache.get((aliased, terse), None)
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
1437 if result is not None:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
1438 return result
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1439
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1440 # Get uname information and then apply platform specific cosmetics
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1441 # to it...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1442 system,node,release,version,machine,processor = uname()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1443 if machine == processor:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1444 processor = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1445 if aliased:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1446 system,release,version = system_alias(system,release,version)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1447
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1448 if system == 'Windows':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1449 # MS platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1450 rel,vers,csd,ptype = win32_ver(version)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1451 if terse:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1452 platform = _platform(system,release)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1453 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1454 platform = _platform(system,release,version,csd)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1455
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1456 elif system in ('Linux',):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1457 # Linux based systems
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1458 distname,distversion,distid = dist('')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1459 if distname and not terse:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1460 platform = _platform(system,release,machine,processor,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1461 'with',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1462 distname,distversion,distid)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1463 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1464 # If the distribution name is unknown check for libc vs. glibc
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1465 libcname,libcversion = libc_ver(sys.executable)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1466 platform = _platform(system,release,machine,processor,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1467 'with',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1468 libcname+libcversion)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1469 elif system == 'Java':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1470 # Java platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1471 r,v,vminfo,(os_name,os_version,os_arch) = java_ver()
40643
47f9efdc0855 Merged revisions 53304-53433,53435-53450 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 40587
diff changeset
1472 if terse or not os_name:
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1473 platform = _platform(system,release,version)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1474 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1475 platform = _platform(system,release,version,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1476 'on',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1477 os_name,os_version,os_arch)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1478
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1479 elif system == 'MacOS':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1480 # MacOS platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1481 if terse:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1482 platform = _platform(system,release)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1483 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1484 platform = _platform(system,release,machine)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1485
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1486 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1487 # Generic handler
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1488 if terse:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1489 platform = _platform(system,release)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1490 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1491 bits,linkage = architecture(sys.executable)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1492 platform = _platform(system,release,machine,processor,bits,linkage)
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1493
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
1494 _platform_cache[(aliased, terse)] = platform
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1495 return platform
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1496
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1497 ### Command line interface
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1498
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1499 if __name__ == '__main__':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1500 # Default is to print the aliased verbose platform string
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1501 terse = ('terse' in sys.argv or '--terse' in sys.argv)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1502 aliased = (not 'nonaliased' in sys.argv and not '--nonaliased' in sys.argv)
40775
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40742
diff changeset
1503 print(platform(aliased,terse))
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1504 sys.exit(0)