annotate Lib/platform.py @ 80661:94de77bd0b4b 2.7

Issue #16194: document imp.load_dynamic problems when read several extension modules from the same binary object file.
author Andrew Svetlov <andrew.svetlov@gmail.com>
date Thu, 29 Nov 2012 19:51:28 +0200
parents e3acc945f0cb
children d234dd21374a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1 #!/usr/bin/env python
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
56830
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 52332
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 # Note: Please keep this module compatible to Python 1.5.2.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
16 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
17 # Still needed:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
18 # * more support for WinCE
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
19 # * support for MS-DOS (PythonDX ?)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
20 # * 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
21 # * support for additional Linux distributions
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
22 #
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
23 # 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
24 # checks (in no particular order):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
25 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
26 # 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
27 # 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
28 # 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
29 # 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
30 # Hammond, Bill Tutt, Hans Nowak, Uwe Zessin (OpenVMS support),
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
31 # 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
32 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
33 # History:
35842
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
34 #
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
35 # <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
36 #
55248
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
37 # 1.0.7 - added DEV_NULL
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
38 # 1.0.6 - added linux_distribution()
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
39 # 1.0.5 - fixed Java support to allow running the module on Jython
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
40 # 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
41 # 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
42 # 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
43 # 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
44 # 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
45 # 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
46 # 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
47 # 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
48 # 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
49 # 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
50 # 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
51 # vms_lib.getsyi() configured
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
52 # 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
53 # known not to support it
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
54 # 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
55 # 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
56 # 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
57 # used more coffee today ;-)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
58 # 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
59 # 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
60 # 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
61 # though
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
62 # 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
63 # 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
64 # '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
65 # 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
66 # 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
67 # (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
68 # detection RE
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
69 # 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
70 # 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
71 # 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
72 # 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
73 # type information
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
74 # 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
75 # 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
76 # 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
77 # 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
78 # 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
79 # 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
80 # 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
81 # 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
82 # 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
83 # 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
84 # 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
85 # 0.1.0 - first release
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 # 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
88 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
89 # 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
90 #
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
91 # 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
92
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
93 __copyright__ = """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
94 Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com
59834
9eabba6ded09 Merged revisions 77120,77151,77155,77209,77229,77256,77317,77331,77333,77359-77360,77382,77561,77570 via svnmerge from
Georg Brandl <georg@python.org>
parents: 58781
diff changeset
95 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
96
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
97 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
98 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
99 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
100 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
101 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
102 that you make.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
103
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
104 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
105 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
106 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
107 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
108 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
109 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
110 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
111
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
112 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
113
55248
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
114 __version__ = '1.0.7'
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
115
79451
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
116 import sys,string,os,re
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
117
55248
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
118 ### Globals & Constants
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
119
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
120 # Determine the platform's /dev/null device
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
121 try:
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
122 DEV_NULL = os.devnull
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
123 except AttributeError:
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
124 # os.devnull was added in Python 2.4, so emulate it for earlier
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
125 # Python versions
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
126 if sys.platform in ('dos','win32','win16','os2'):
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
127 # Use the old CP/M NUL as device name
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
128 DEV_NULL = 'NUL'
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
129 else:
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
130 # Standard Unix uses /dev/null
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
131 DEV_NULL = '/dev/null'
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
132
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
133 ### Platform specific APIs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
134
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
135 _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
136 '|'
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
137 '(GLIBC_([0-9.]+))'
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
138 '|'
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
139 '(libc(_\w+)?\.so(?:\.(\d[0-9.]*))?)')
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
140
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
141 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
142
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
143 chunksize=2048):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
144
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
145 """ Tries to determine the libc version that the file executable
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
146 (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
147
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
148 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
149 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
150
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
151 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
152 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
153 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
154
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
155 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
156
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
157 """
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
158 if hasattr(os.path, 'realpath'):
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
159 # Python 2.2 introduced os.path.realpath(); it is used
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
160 # here to work around problems with Cygwin not being
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
161 # able to open symlinks for reading
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
162 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
163 f = open(executable,'rb')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
164 binary = f.read(chunksize)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
165 pos = 0
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
166 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
167 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
168 if not m:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
169 binary = f.read(chunksize)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
170 if not binary:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
171 break
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
172 pos = 0
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
173 continue
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
174 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
175 if libcinit and not lib:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
176 lib = 'libc'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
177 elif glibc:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
178 if lib != 'glibc':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
179 lib = 'glibc'
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 glibcversion > version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
182 version = glibcversion
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
183 elif so:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
184 if lib != 'glibc':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
185 lib = 'libc'
73987
f2a5dcced66d Issue #13545: Fix platform.libc_version() is the SO version is missing
Victor Stinner <victor.stinner@haypocalc.com>
parents: 71316
diff changeset
186 if soversion and soversion > version:
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
187 version = soversion
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
188 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
189 version = version + threads
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
190 pos = m.end()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
191 f.close()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
192 return lib,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
193
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
194 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
195
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
196 """ 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
197 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
198
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
199 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
200 Slackware Linux distributions.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
201
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
202 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
203 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
204 # 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
205 info = open('/var/adm/inst-log/info').readlines()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
206 distname = 'SuSE'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
207 for line in info:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
208 tv = string.split(line)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
209 if len(tv) == 2:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
210 tag,value = tv
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
211 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
212 continue
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
213 if tag == 'MIN_DIST_VERSION':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
214 version = string.strip(value)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
215 elif tag == 'DIST_IDENT':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
216 values = string.split(value,'-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
217 id = values[2]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
218 return distname,version,id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
219
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
220 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
221 # Caldera OpenLinux has some infos in that file (thanks to Colin Kong)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
222 info = open('/etc/.installed').readlines()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
223 for line in info:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
224 pkg = string.split(line,'-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
225 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
226 # 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
227 # 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
228 return 'OpenLinux',pkg[1],id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
229
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
230 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
231 # 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
232 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
233 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
234 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
235 del verfiles[n]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
236 if verfiles:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
237 verfiles.sort()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
238 distname = 'slackware'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
239 version = verfiles[-1][14:]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
240 return distname,version,id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
241
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
242 return distname,version,id
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
243
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
244 _release_filename = re.compile(r'(\w+)[-_](release|version)')
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
245 _lsb_release_version = re.compile(r'(.+)'
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
246 ' release '
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
247 '([\d.]+)'
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
248 '[^(]*(?:\((.+)\))?')
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
249 _release_version = re.compile(r'([^0-9]+)'
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
250 '(?: release )?'
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
251 '([\d.]+)'
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
252 '[^(]*(?:\((.+)\))?')
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
253
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
254 # See also http://www.novell.com/coolsolutions/feature/11251.html
40732
5dae0d7f683a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 40622
diff changeset
255 # and http://linuxmafia.com/faq/Admin/release-files.html
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
256 # and http://data.linux-ntfs.org/rpm/whichrpm
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
257 # and http://www.die.net/doc/linux/man/man1/lsb_release.1.html
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
258
45708
37aa416b4c47 Add new name for Mandrake: Mandriva.
Marc-André Lemburg <mal@egenix.com>
parents: 43385
diff changeset
259 _supported_dists = (
37aa416b4c47 Add new name for Mandrake: Mandriva.
Marc-André Lemburg <mal@egenix.com>
parents: 43385
diff changeset
260 'SuSE', 'debian', 'fedora', 'redhat', 'centos',
37aa416b4c47 Add new name for Mandrake: Mandriva.
Marc-André Lemburg <mal@egenix.com>
parents: 43385
diff changeset
261 'mandrake', 'mandriva', 'rocks', 'slackware', 'yellowdog', 'gentoo',
37aa416b4c47 Add new name for Mandrake: Mandriva.
Marc-André Lemburg <mal@egenix.com>
parents: 43385
diff changeset
262 'UnitedLinux', 'turbolinux')
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
263
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
264 def _parse_release_file(firstline):
40732
5dae0d7f683a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 40622
diff changeset
265
58481
a256791aa19d Merged revisions 77735 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56830
diff changeset
266 # Default to empty 'version' and 'id' strings. Both defaults are used
a256791aa19d Merged revisions 77735 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56830
diff changeset
267 # when 'firstline' is empty. 'id' defaults to empty when an id can not
a256791aa19d Merged revisions 77735 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56830
diff changeset
268 # be deduced.
a256791aa19d Merged revisions 77735 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56830
diff changeset
269 version = ''
a256791aa19d Merged revisions 77735 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56830
diff changeset
270 id = ''
a256791aa19d Merged revisions 77735 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56830
diff changeset
271
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
272 # Parse the first line
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
273 m = _lsb_release_version.match(firstline)
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
274 if m is not None:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
275 # LSB format: "distro release x.x (codename)"
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
276 return tuple(m.groups())
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
277
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
278 # Pre-LSB format: "distro x.x (codename)"
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
279 m = _release_version.match(firstline)
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
280 if m is not None:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
281 return tuple(m.groups())
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
282
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
283 # Unkown format... take the first two words
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
284 l = string.split(string.strip(firstline))
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
285 if l:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
286 version = l[0]
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
287 if len(l) > 1:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
288 id = l[1]
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
289 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
290
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
291 def linux_distribution(distname='', version='', id='',
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
292
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
293 supported_dists=_supported_dists,
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
294 full_distribution_name=1):
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
295
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
296 """ Tries to determine the name of the Linux OS distribution name.
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
297
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
298 The function first looks for a distribution release file in
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
299 /etc and then reverts to _dist_try_harder() in case no
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
300 suitable files are found.
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
301
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
302 supported_dists may be given to define the set of Linux
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
303 distributions to look for. It defaults to a list of currently
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
304 supported Linux distributions identified by their release file
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
305 name.
35842
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
306
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
307 If full_distribution_name is true (default), the full
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
308 distribution read from the OS is returned. Otherwise the short
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
309 name taken from supported_dists is used.
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
310
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
311 Returns a tuple (distname,version,id) which default to the
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
312 args given as parameters.
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
313
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
314 """
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
315 try:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
316 etc = os.listdir('/etc')
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
317 except os.error:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
318 # Probably not a Unix system
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
319 return distname,version,id
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
320 etc.sort()
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
321 for file in etc:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
322 m = _release_filename.match(file)
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
323 if m is not None:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
324 _distname,dummy = m.groups()
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
325 if _distname in supported_dists:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
326 distname = _distname
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
327 break
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
328 else:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
329 return _dist_try_harder(distname,version,id)
40732
5dae0d7f683a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 40622
diff changeset
330
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
331 # Read the first line
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
332 f = open('/etc/'+file, 'r')
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
333 firstline = f.readline()
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
334 f.close()
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
335 _distname, _version, _id = _parse_release_file(firstline)
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
336
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
337 if _distname and full_distribution_name:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
338 distname = _distname
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
339 if _version:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
340 version = _version
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
341 if _id:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
342 id = _id
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
343 return distname, version, id
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
344
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
345 # To maintain backwards compatibility:
35842
f85dc31f1f3e Patch by pythonic <pythonic@gmail.com> to support Fedora
Marc-André Lemburg <mal@egenix.com>
parents: 32383
diff changeset
346
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
347 def dist(distname='',version='',id='',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
348
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
349 supported_dists=_supported_dists):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
350
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
351 """ 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
352
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
353 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
354 /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
355 suitable files are found.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
356
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
357 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
358 args given as parameters.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
359
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
360 """
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
361 return linux_distribution(distname, version, id,
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
362 supported_dists=supported_dists,
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
363 full_distribution_name=0)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
364
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
365 class _popen:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
366
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
367 """ Fairly portable (alternative) popen implementation.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
368
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
369 This is mostly needed in case os.popen() is not available, or
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
370 doesn't work as advertised, e.g. in Win9X GUI programs like
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
371 PythonWin or IDLE.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
372
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
373 Writing to the pipe is currently not supported.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
374
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
375 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
376 tmpfile = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
377 pipe = None
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
378 bufsize = None
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
379 mode = 'r'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
380
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
381 def __init__(self,cmd,mode='r',bufsize=None):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
382
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
383 if mode != 'r':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
384 raise ValueError,'popen()-emulation only supports read mode'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
385 import tempfile
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
386 self.tmpfile = tmpfile = tempfile.mktemp()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
387 os.system(cmd + ' > %s' % tmpfile)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
388 self.pipe = open(tmpfile,'rb')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
389 self.bufsize = bufsize
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
390 self.mode = mode
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
391
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
392 def read(self):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
393
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
394 return self.pipe.read()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
395
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
396 def readlines(self):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
397
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
398 if self.bufsize is not None:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
399 return self.pipe.readlines()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
400
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
401 def close(self,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
402
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
403 remove=os.unlink,error=os.error):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
404
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
405 if self.pipe:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
406 rc = self.pipe.close()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
407 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
408 rc = 255
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
409 if self.tmpfile:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
410 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
411 remove(self.tmpfile)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
412 except error:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
413 pass
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
414 return rc
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
415
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
416 # Alias
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
417 __del__ = close
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
418
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
419 def popen(cmd, mode='r', bufsize=None):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
420
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
421 """ Portable popen() interface.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
422 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
423 # Find a working popen implementation preferring win32pipe.popen
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
424 # over os.popen over _popen
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
425 popen = None
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
426 if os.environ.get('OS','') == 'Windows_NT':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
427 # On NT win32pipe should work; on Win9x it hangs due to bugs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
428 # in the MS C lib (see MS KnowledgeBase article Q150956)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
429 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
430 import win32pipe
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
431 except ImportError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
432 pass
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
433 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
434 popen = win32pipe.popen
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
435 if popen is None:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
436 if hasattr(os,'popen'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
437 popen = os.popen
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
438 # Check whether it works... it doesn't in GUI programs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
439 # on Windows platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
440 if sys.platform == 'win32': # XXX Others too ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
441 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
442 popen('')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
443 except os.error:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
444 popen = _popen
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
445 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
446 popen = _popen
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
447 if bufsize is None:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
448 return popen(cmd,mode)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
449 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
450 return popen(cmd,mode,bufsize)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
451
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
452 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
453
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
454 """ Normalize the version and build strings and return a single
35898
d72db82a70cd Fix typo.
Walter Dörwald <walter@livinglogic.de>
parents: 35842
diff changeset
455 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
456 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
457 l = string.split(version,'.')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
458 if build:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
459 l.append(build)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
460 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
461 ints = map(int,l)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
462 except ValueError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
463 strings = l
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
464 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
465 strings = map(str,ints)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
466 version = string.join(strings[:3],'.')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
467 return version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
468
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
469 _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
470 '.*'
55251
29e7a4dd417c Use a different VER command output parser to address the localization
Marc-André Lemburg <mal@egenix.com>
parents: 55248
diff changeset
471 '\[.* ([\d.]+)\])')
29e7a4dd417c Use a different VER command output parser to address the localization
Marc-André Lemburg <mal@egenix.com>
parents: 55248
diff changeset
472
29e7a4dd417c Use a different VER command output parser to address the localization
Marc-André Lemburg <mal@egenix.com>
parents: 55248
diff changeset
473 # Examples of VER command output:
29e7a4dd417c Use a different VER command output parser to address the localization
Marc-André Lemburg <mal@egenix.com>
parents: 55248
diff changeset
474 #
29e7a4dd417c Use a different VER command output parser to address the localization
Marc-André Lemburg <mal@egenix.com>
parents: 55248
diff changeset
475 # Windows 2000: Microsoft Windows 2000 [Version 5.00.2195]
29e7a4dd417c Use a different VER command output parser to address the localization
Marc-André Lemburg <mal@egenix.com>
parents: 55248
diff changeset
476 # Windows XP: Microsoft Windows XP [Version 5.1.2600]
29e7a4dd417c Use a different VER command output parser to address the localization
Marc-André Lemburg <mal@egenix.com>
parents: 55248
diff changeset
477 # Windows Vista: Microsoft Windows [Version 6.0.6002]
29e7a4dd417c Use a different VER command output parser to address the localization
Marc-André Lemburg <mal@egenix.com>
parents: 55248
diff changeset
478 #
29e7a4dd417c Use a different VER command output parser to address the localization
Marc-André Lemburg <mal@egenix.com>
parents: 55248
diff changeset
479 # Note that the "Version" string gets localized on different
29e7a4dd417c Use a different VER command output parser to address the localization
Marc-André Lemburg <mal@egenix.com>
parents: 55248
diff changeset
480 # 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
481
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
482 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
483
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
484 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
485
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
486 """ 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
487 a tuple (system,release,version).
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
488
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
489 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
490 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
491
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
492 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
493 defaults.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
494
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 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
497 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
498
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
499 # Try some common cmd strings
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
500 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
501 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
502 pipe = popen(cmd)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
503 info = pipe.read()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
504 if pipe.close():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
505 raise os.error,'command failed'
68588
cd8d3c2d3bce #11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68256
diff changeset
506 # 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
507 # to stderr ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
508 except os.error,why:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
509 #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
510 continue
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
511 except IOError,why:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
512 #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
513 continue
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
514 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
515 break
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
516 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
517 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
518
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
519 # Parse the output
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
520 info = string.strip(info)
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
521 m = _ver_output.match(info)
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
522 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
523 system,release,version = m.groups()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
524 # 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
525 if release[-1] == '.':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
526 release = release[:-1]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
527 if version[-1] == '.':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
528 version = version[:-1]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
529 # 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
530 # zeros)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
531 version = _norm_version(version)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
532 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
533
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
534 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
535
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
536 """ 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
537
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
538 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
539
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
540 """
45958
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
541 try:
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
542 # Use win32api if available
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
543 from win32api import RegQueryValueEx
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
544 except ImportError:
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
545 # On Python 2.0 and later, emulate using _winreg
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
546 import _winreg
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
547 RegQueryValueEx = _winreg.QueryValueEx
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
548 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
549 return RegQueryValueEx(key,name)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
550 except:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
551 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
552
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
553 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
554
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
555 """ 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
556 and return a tuple (version,csd,ptype) referring to version
74713
822d362ab48f merge from fb225c289bf0
Brian Curtin <brian@python.org>
parents: 73987
diff changeset
557 number, CSD level (service pack), and OS type (multi/single
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
558 processor).
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
559
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
560 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
561 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
562 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
563 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
564 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
565 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
566
45958
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
567 Note: this function works best with Mark Hammond's win32
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
568 package installed, but also on Python 2.3 and later. It
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
569 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
570
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
571 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
572 # 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
573 # 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
574 #
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
575 # 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
576 #
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
577 # 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
578 # 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
579
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
580 # Import the needed APIs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
581 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
582 import win32api
45958
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
583 from win32api import RegQueryValueEx, RegOpenKeyEx, \
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
584 RegCloseKey, GetVersionEx
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
585 from win32con import HKEY_LOCAL_MACHINE, VER_PLATFORM_WIN32_NT, \
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
586 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
587 except ImportError:
45958
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
588 # Emulate the win32api module using Python APIs
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
589 try:
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
590 sys.getwindowsversion
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
591 except AttributeError:
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
592 # No emulation possible, so return the defaults...
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
593 return release,version,csd,ptype
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
594 else:
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
595 # Emulation using _winreg (added in Python 2.0) and
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
596 # sys.getwindowsversion() (added in Python 2.3)
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
597 import _winreg
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
598 GetVersionEx = sys.getwindowsversion
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
599 RegQueryValueEx = _winreg.QueryValueEx
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
600 RegOpenKeyEx = _winreg.OpenKeyEx
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
601 RegCloseKey = _winreg.CloseKey
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
602 HKEY_LOCAL_MACHINE = _winreg.HKEY_LOCAL_MACHINE
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
603 VER_PLATFORM_WIN32_WINDOWS = 1
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
604 VER_PLATFORM_WIN32_NT = 2
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
605 VER_NT_WORKSTATION = 1
61312
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
606 VER_NT_SERVER = 3
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
607 REG_SZ = 1
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
608
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
609 # Find out the registry key and some general version infos
61312
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
610 winver = GetVersionEx()
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
611 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
612 version = '%i.%i.%i' % (maj,min,buildno & 0xFFFF)
61312
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
613 if hasattr(winver, "service_pack"):
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
614 if winver.service_pack != "":
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
615 csd = 'SP%s' % winver.service_pack_major
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
616 else:
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
617 if csd[:13] == 'Service Pack ':
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
618 csd = 'SP' + csd[13:]
55251
29e7a4dd417c Use a different VER command output parser to address the localization
Marc-André Lemburg <mal@egenix.com>
parents: 55248
diff changeset
619
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
620 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
621 regkey = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
622 # 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
623 if maj == 4:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
624 if min == 0:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
625 release = '95'
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
626 elif min == 10:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
627 release = '98'
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
628 elif min == 90:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
629 release = 'Me'
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
630 else:
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
631 release = 'postMe'
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
632 elif maj == 5:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
633 release = '2000'
55251
29e7a4dd417c Use a different VER command output parser to address the localization
Marc-André Lemburg <mal@egenix.com>
parents: 55248
diff changeset
634
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
635 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
636 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
637 if maj <= 4:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
638 release = 'NT'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
639 elif maj == 5:
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
640 if min == 0:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
641 release = '2000'
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
642 elif min == 1:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
643 release = 'XP'
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
644 elif min == 2:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
645 release = '2003Server'
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
646 else:
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
647 release = 'post2003'
42059
0459b88e14b4 Add patch #1726668: Windows Vista support.
Marc-André Lemburg <mal@egenix.com>
parents: 42058
diff changeset
648 elif maj == 6:
61312
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
649 if hasattr(winver, "product_type"):
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
650 product_type = winver.product_type
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
651 else:
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
652 product_type = VER_NT_WORKSTATION
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
653 # Without an OSVERSIONINFOEX capable sys.getwindowsversion(),
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
654 # or help from the registry, we cannot properly identify
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
655 # non-workstation versions.
45958
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
656 try:
61312
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
657 key = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey)
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
658 name, type = RegQueryValueEx(key, "ProductName")
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
659 # Discard any type that isn't REG_SZ
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
660 if type == REG_SZ and name.find("Server") != -1:
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
661 product_type = VER_NT_SERVER
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
662 except WindowsError:
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
663 # Use default of VER_NT_WORKSTATION
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
664 pass
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
665
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
666 if min == 0:
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
667 if product_type == VER_NT_WORKSTATION:
42059
0459b88e14b4 Add patch #1726668: Windows Vista support.
Marc-André Lemburg <mal@egenix.com>
parents: 42058
diff changeset
668 release = 'Vista'
0459b88e14b4 Add patch #1726668: Windows Vista support.
Marc-André Lemburg <mal@egenix.com>
parents: 42058
diff changeset
669 else:
61312
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
670 release = '2008Server'
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
671 elif min == 1:
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
672 if product_type == VER_NT_WORKSTATION:
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
673 release = '7'
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
674 else:
e4a0ba251c4a Merged revisions 80857 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents: 59834
diff changeset
675 release = '2008ServerR2'
79671
e3acc945f0cb Fix #16176. Properly identify Windows 8 via platform.platform()
Brian Curtin <brian@python.org>
parents: 79487
diff changeset
676 elif min == 2:
e3acc945f0cb Fix #16176. Properly identify Windows 8 via platform.platform()
Brian Curtin <brian@python.org>
parents: 79487
diff changeset
677 if product_type == VER_NT_WORKSTATION:
e3acc945f0cb Fix #16176. Properly identify Windows 8 via platform.platform()
Brian Curtin <brian@python.org>
parents: 79487
diff changeset
678 release = '8'
e3acc945f0cb Fix #16176. Properly identify Windows 8 via platform.platform()
Brian Curtin <brian@python.org>
parents: 79487
diff changeset
679 else:
e3acc945f0cb Fix #16176. Properly identify Windows 8 via platform.platform()
Brian Curtin <brian@python.org>
parents: 79487
diff changeset
680 release = '2012Server'
42059
0459b88e14b4 Add patch #1726668: Windows Vista support.
Marc-André Lemburg <mal@egenix.com>
parents: 42058
diff changeset
681 else:
79671
e3acc945f0cb Fix #16176. Properly identify Windows 8 via platform.platform()
Brian Curtin <brian@python.org>
parents: 79487
diff changeset
682 release = 'post2012Server'
55251
29e7a4dd417c Use a different VER command output parser to address the localization
Marc-André Lemburg <mal@egenix.com>
parents: 55248
diff changeset
683
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
684 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
685 if not release:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
686 # 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
687 release = '%i.%i' % (maj,min)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
688 return release,version,csd,ptype
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
689
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
690 # Open the registry key
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
691 try:
45958
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
692 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
693 # Get a value to make sure the key exists...
45958
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
694 RegQueryValueEx(keyCurVer, 'SystemRoot')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
695 except:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
696 return release,version,csd,ptype
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
697
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
698 # Parse values
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
699 #subversion = _win32_getvalue(keyCurVer,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
700 # 'SubVersionNumber',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
701 # ('',1))[0]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
702 #if subversion:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
703 # 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
704 build = _win32_getvalue(keyCurVer,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
705 'CurrentBuildNumber',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
706 ('',1))[0]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
707 ptype = _win32_getvalue(keyCurVer,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
708 'CurrentType',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
709 (ptype,1))[0]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
710
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
711 # Normalize version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
712 version = _norm_version(version,build)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
713
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
714 # Close key
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
715 RegCloseKey(keyCurVer)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
716 return release,version,csd,ptype
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
717
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
718 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
719
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
720 from gestalt import gestalt
30118
3779eb483e6b Bug fix for #780461: 'sysu' gestalt selector is meaningless on MacOSX,
Jack Jansen <jack.jansen@cwi.nl>
parents: 30049
diff changeset
721 import MacOS
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
722 l = []
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
723 append = l.append
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
724 for selector in selectors:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
725 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
726 append(gestalt(selector))
30118
3779eb483e6b Bug fix for #780461: 'sysu' gestalt selector is meaningless on MacOSX,
Jack Jansen <jack.jansen@cwi.nl>
parents: 30049
diff changeset
727 except (RuntimeError, MacOS.Error):
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
728 append(default)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
729 return l
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
730
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
731 def _bcd2str(bcd):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
732
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
733 return hex(bcd)[2:]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
734
63159
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
735 def _mac_ver_gestalt():
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
736 """
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
737 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
738 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
739 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
740
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
741 http://www.rgaros.nl/gestalt/
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
742 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
743 # 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
744 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
745 import gestalt
30118
3779eb483e6b Bug fix for #780461: 'sysu' gestalt selector is meaningless on MacOSX,
Jack Jansen <jack.jansen@cwi.nl>
parents: 30049
diff changeset
746 import MacOS
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
747 except ImportError:
63159
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
748 return None
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
749 # Get the infos
58781
8214d4fc3234 Merged revisions 78056 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 58481
diff changeset
750 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
751 # Decode the infos
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
752 if sysv:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
753 major = (sysv & 0xFF00) >> 8
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
754 minor = (sysv & 0x00F0) >> 4
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
755 patch = (sysv & 0x000F)
46730
c67c09554d23 Backport of revision 62854
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 43386
diff changeset
756
c67c09554d23 Backport of revision 62854
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 43386
diff changeset
757 if (major, minor) >= (10, 4):
c67c09554d23 Backport of revision 62854
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 43386
diff changeset
758 # the 'sysv' gestald cannot return patchlevels
c67c09554d23 Backport of revision 62854
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 43386
diff changeset
759 # higher than 9. Apple introduced 3 new
c67c09554d23 Backport of revision 62854
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 43386
diff changeset
760 # gestalt codes in 10.4 to deal with this
c67c09554d23 Backport of revision 62854
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 43386
diff changeset
761 # issue (needed because patch levels can
c67c09554d23 Backport of revision 62854
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 43386
diff changeset
762 # run higher than 9, such as 10.4.11)
c67c09554d23 Backport of revision 62854
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 43386
diff changeset
763 major,minor,patch = _mac_ver_lookup(('sys1','sys2','sys3'))
c67c09554d23 Backport of revision 62854
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 43386
diff changeset
764 release = '%i.%i.%i' %(major, minor, patch)
c67c09554d23 Backport of revision 62854
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 43386
diff changeset
765 else:
c67c09554d23 Backport of revision 62854
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 43386
diff changeset
766 release = '%s.%i.%i' % (_bcd2str(major),minor,patch)
47165
cd91daf0327c - Add unittests for platform.mac_ver (or rather, ensure that the unittest for
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 46729
diff changeset
767
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
768 if sysa:
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
769 machine = {0x1: '68k',
37797
6f35f7be36c3 Teach platform about darwin/x86
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 36210
diff changeset
770 0x2: 'PowerPC',
6f35f7be36c3 Teach platform about darwin/x86
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 36210
diff changeset
771 0xa: 'i386'}.get(sysa,'')
63159
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
772
71316
0a53a978a160 Issue #12549: Correct test_platform to not fail when OS X returns 'x86_64'
Ned Deily <nad@acm.org>
parents: 69827
diff changeset
773 versioninfo=('', '', '')
63159
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
774 return release,versioninfo,machine
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
775
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
776 def _mac_ver_xml():
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
777 fn = '/System/Library/CoreServices/SystemVersion.plist'
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
778 if not os.path.exists(fn):
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
779 return None
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
780
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
781 try:
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
782 import plistlib
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
783 except ImportError:
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
784 return None
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
785
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
786 pl = plistlib.readPlist(fn)
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
787 release = pl['ProductVersion']
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
788 versioninfo=('', '', '')
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
789 machine = os.uname()[4]
63666
ebc90517b8d9 Merged revisions 83646 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 63579
diff changeset
790 if machine in ('ppc', 'Power Macintosh'):
63159
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
791 # for compatibility with the gestalt based code
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
792 machine = 'PowerPC'
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
793
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
794 return release,versioninfo,machine
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
795
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
796
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
797 def mac_ver(release='',versioninfo=('','',''),machine=''):
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
798
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
799 """ Get MacOS version information and return it as tuple (release,
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
800 versioninfo, machine) with versioninfo being a tuple (version,
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
801 dev_stage, non_release_version).
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
802
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
803 Entries which cannot be determined are set to the paramter values
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
804 which default to ''. All tuple entries are strings.
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
805 """
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
806
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
807 # First try reading the information from an XML file which should
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
808 # always be present
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
809 info = _mac_ver_xml()
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
810 if info is not None:
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
811 return info
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
812
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
813 # If that doesn't work for some reason fall back to reading the
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
814 # information using gestalt calls.
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
815 info = _mac_ver_gestalt()
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
816 if info is not None:
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
817 return info
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
818
e267ee9760bd Merged revisions 83085 via svnmerge from
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 61312
diff changeset
819 # 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
820 return release,versioninfo,machine
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
821
29657
5b105a950334 remove extra parameter from _java_getprop, remove duplicate imports
Neal Norwitz <nnorwitz@gmail.com>
parents: 28779
diff changeset
822 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
823
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
824 from java.lang import System
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
825 try:
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
826 value = System.getProperty(name)
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
827 if value is None:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
828 return default
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
829 return value
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
830 except AttributeError:
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
831 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
832
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
833 def java_ver(release='',vendor='',vminfo=('','',''),osinfo=('','','')):
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
834
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
835 """ Version interface for Jython.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
836
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
837 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
838 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
839 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
840
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
841 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
842 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
843
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
844 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
845 # Import the needed APIs
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
846 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
847 import java.lang
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
848 except ImportError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
849 return release,vendor,vminfo,osinfo
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
850
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
851 vendor = _java_getprop('java.vendor', vendor)
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
852 release = _java_getprop('java.version', release)
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
853 vm_name, vm_release, vm_vendor = vminfo
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
854 vm_name = _java_getprop('java.vm.name', vm_name)
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
855 vm_vendor = _java_getprop('java.vm.vendor', vm_vendor)
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
856 vm_release = _java_getprop('java.vm.version', vm_release)
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
857 vminfo = vm_name, vm_release, vm_vendor
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
858 os_name, os_version, os_arch = osinfo
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
859 os_arch = _java_getprop('java.os.arch', os_arch)
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
860 os_name = _java_getprop('java.os.name', os_name)
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
861 os_version = _java_getprop('java.os.version', os_version)
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
862 osinfo = os_name, os_version, os_arch
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
863
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
864 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
865
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
866 ### System name aliasing
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
867
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
868 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
869
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
870 """ 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
871 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
872
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
873 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
874 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
875
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 if system == 'Rhapsody':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
878 # Apple's BSD derivative
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
879 # 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
880 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
881
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
882 elif system == 'SunOS':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
883 # Sun's OS
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
884 if release < '5':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
885 # 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
886 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
887 # Modify release (marketing release = SunOS release - 3)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
888 l = string.split(release,'.')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
889 if l:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
890 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
891 major = int(l[0])
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
892 except ValueError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
893 pass
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
894 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
895 major = major - 3
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
896 l[0] = str(major)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
897 release = string.join(l,'.')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
898 if release < '6':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
899 system = 'Solaris'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
900 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
901 # 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
902 system = 'Solaris'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
903
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
904 elif system == 'IRIX64':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
905 # 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
906 # 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
907 # apps are also supported..
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
908 system = 'IRIX'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
909 if version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
910 version = version + ' (64bit)'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
911 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
912 version = '64bit'
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 elif system in ('win32','win16'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
915 # 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
916 system = 'Windows'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
917
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
918 return system,release,version
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
919
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
920 ### Various internal helpers
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
921
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
922 def _platform(*args):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
923
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
924 """ 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
925 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
926 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
927 # Format the platform string
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
928 platform = string.join(
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
929 map(string.strip,
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
930 filter(len, args)),
28761
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
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
933 # Cleanup some possible filename obstacles...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
934 replace = string.replace
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
935 platform = replace(platform,' ','_')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
936 platform = replace(platform,'/','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
937 platform = replace(platform,'\\','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
938 platform = replace(platform,':','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
939 platform = replace(platform,';','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
940 platform = replace(platform,'"','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
941 platform = replace(platform,'(','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
942 platform = replace(platform,')','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
943
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
944 # No need to report 'unknown' information...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
945 platform = replace(platform,'unknown','')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
946
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
947 # Fold '--'s and remove trailing '-'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
948 while 1:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
949 cleaned = replace(platform,'--','-')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
950 if cleaned == platform:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
951 break
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
952 platform = cleaned
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
953 while platform[-1] == '-':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
954 platform = platform[:-1]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
955
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
956 return platform
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
957
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
958 def _node(default=''):
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 """ 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
961 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
962 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
963 import socket
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
964 except ImportError:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
965 # No sockets...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
966 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
967 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
968 return socket.gethostname()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
969 except socket.error:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
970 # Still not working...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
971 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
972
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
973 # os.path.abspath is new in Python 1.5.2:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
974 if not hasattr(os.path,'abspath'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
975
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
976 def _abspath(path,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
977
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
978 isabs=os.path.isabs,join=os.path.join,getcwd=os.getcwd,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
979 normpath=os.path.normpath):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
980
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
981 if not isabs(path):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
982 path = join(getcwd(), path)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
983 return normpath(path)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
984
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
985 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
986
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
987 _abspath = os.path.abspath
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
988
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
989 def _follow_symlinks(filepath):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
990
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
991 """ 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
992 real file is reached.
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 filepath = _abspath(filepath)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
995 while os.path.islink(filepath):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
996 filepath = os.path.normpath(
49012
2c2bef8ffca1 Issue #3762: platform.architecture() fails if python is lanched via its symbolic link.
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 46730
diff changeset
997 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
998 return filepath
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
999
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1000 def _syscmd_uname(option,default=''):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1001
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1002 """ 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
1003 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1004 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
1005 # XXX Others too ?
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1006 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1007 try:
55248
72c5e173aac5 Use a new global DEV_NULL instead of hard-coding /dev/null into the system
Marc-André Lemburg <mal@egenix.com>
parents: 52349
diff changeset
1008 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
1009 except (AttributeError,os.error):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1010 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1011 output = string.strip(f.read())
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1012 rc = f.close()
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1013 if not output or rc:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1014 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1015 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1016 return output
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1017
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1018 def _syscmd_file(target,default=''):
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 """ 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
1021
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1022 The function uses the -b option of the file command to have it
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1023 ommit the filename in its output and if possible the -L option
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1024 to have the command follow symlinks. It returns default in
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1025 case the command should fail.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1026
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1027 """
79451
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1028
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1029 # We do the import here to avoid a bootstrap issue.
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1030 # See c73b90b6dadd changeset.
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1031 #
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1032 # [..]
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1033 # ranlib libpython2.7.a
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1034 # gcc -o python \
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1035 # Modules/python.o \
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1036 # libpython2.7.a -lsocket -lnsl -ldl -lm
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1037 # Traceback (most recent call last):
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1038 # File "./setup.py", line 8, in <module>
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1039 # from platform import machine as platform_machine
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1040 # File "[..]/build/Lib/platform.py", line 116, in <module>
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1041 # import sys,string,os,re,subprocess
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1042 # File "[..]/build/Lib/subprocess.py", line 429, in <module>
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1043 # import select
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1044 # ImportError: No module named select
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1045
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1046 import subprocess
d6d908dc11f2 Closes #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Solve a 2.7 bootstrap issue
Jesus Cea <jcea@jcea.es>
parents: 79450
diff changeset
1047
48924
ed59f3b67b3a Issue #3748: platform.architecture() printed vogus message on windows.
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 47684
diff changeset
1048 if sys.platform in ('dos','win32','win16','os2'):
ed59f3b67b3a Issue #3748: platform.architecture() printed vogus message on windows.
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 47684
diff changeset
1049 # XXX Others too ?
ed59f3b67b3a Issue #3748: platform.architecture() printed vogus message on windows.
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 47684
diff changeset
1050 return default
79450
de5d5cbf1b45 Backed out changeset 5abacebec9d2
Jesus Cea <jcea@jcea.es>
parents: 79449
diff changeset
1051 target = _follow_symlinks(target)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1052 try:
79487
19d37c8d1882 #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Fix original patch
Jesus Cea <jcea@jcea.es>
parents: 79485
diff changeset
1053 proc = subprocess.Popen(['file', target],
19d37c8d1882 #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Fix original patch
Jesus Cea <jcea@jcea.es>
parents: 79485
diff changeset
1054 stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
79450
de5d5cbf1b45 Backed out changeset 5abacebec9d2
Jesus Cea <jcea@jcea.es>
parents: 79449
diff changeset
1055
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1056 except (AttributeError,os.error):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1057 return default
79485
b94a9ff13199 #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Use 'communicate()'
Jesus Cea <jcea@jcea.es>
parents: 79451
diff changeset
1058 output = proc.communicate()[0]
79450
de5d5cbf1b45 Backed out changeset 5abacebec9d2
Jesus Cea <jcea@jcea.es>
parents: 79449
diff changeset
1059 rc = proc.wait()
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1060 if not output or rc:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1061 return default
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1062 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1063 return output
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1064
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1065 ### Information about the used architecture
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1066
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1067 # 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
1068 # defaults given as parameters
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1069 _default_architecture = {
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1070 'win32': ('','WindowsPE'),
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1071 'win16': ('','Windows'),
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1072 'dos': ('','MSDOS'),
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1073 }
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1074
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
1075 _architecture_split = re.compile(r'[\s,]').split
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1076
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
1077 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
1078
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1079 """ Queries the given executable (defaults to the Python interpreter
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
1080 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
1081
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
1082 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
1083 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
1084 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
1085
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1086 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
1087 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
1088 (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
1089 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
1090
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1091 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
1092 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
1093 platforms. On some non-Unix platforms where the "file" command
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
1094 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
1095 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
1096
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1097 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1098 # 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
1099 # else is given as default.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1100 if not bits:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1101 import struct
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1102 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1103 size = struct.calcsize('P')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1104 except struct.error:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1105 # 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
1106 size = struct.calcsize('l')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1107 bits = str(size*8) + 'bit'
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1108
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1109 # Get data from the 'file' system command
40622
f328329471df Use defaults if sys.executable isn't set (e.g. on Jython).
Marc-André Lemburg <mal@egenix.com>
parents: 40618
diff changeset
1110 if executable:
f328329471df Use defaults if sys.executable isn't set (e.g. on Jython).
Marc-André Lemburg <mal@egenix.com>
parents: 40618
diff changeset
1111 output = _syscmd_file(executable, '')
f328329471df Use defaults if sys.executable isn't set (e.g. on Jython).
Marc-André Lemburg <mal@egenix.com>
parents: 40618
diff changeset
1112 else:
f328329471df Use defaults if sys.executable isn't set (e.g. on Jython).
Marc-André Lemburg <mal@egenix.com>
parents: 40618
diff changeset
1113 output = ''
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1114
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1115 if not output and \
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1116 executable == sys.executable:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1117 # "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
1118 # some sensible defaults then...
63579
ac29f70c61db Merged revisions 79558 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 63159
diff changeset
1119 if sys.platform in _default_architecture:
ac29f70c61db Merged revisions 79558 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 63159
diff changeset
1120 b, l = _default_architecture[sys.platform]
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1121 if b:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1122 bits = b
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1123 if l:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1124 linkage = l
63579
ac29f70c61db Merged revisions 79558 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 63159
diff changeset
1125 return bits, linkage
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1126
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1127 # Split the output into a list of strings omitting the filename
28762
6503ad8dca88 Reformatted a bit to remove the lengthy re.compile() from the function
Marc-André Lemburg <mal@egenix.com>
parents: 28761
diff changeset
1128 fileout = _architecture_split(output)[1:]
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1129
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1130 if 'executable' not in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1131 # Format not supported
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1132 return bits,linkage
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1133
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1134 # Bits
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1135 if '32-bit' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1136 bits = '32bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1137 elif 'N32' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1138 # On Irix only
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1139 bits = 'n32bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1140 elif '64-bit' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1141 bits = '64bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1142
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1143 # Linkage
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1144 if 'ELF' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1145 linkage = 'ELF'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1146 elif 'PE' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1147 # 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
1148 if 'Windows' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1149 linkage = 'WindowsPE'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1150 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1151 linkage = 'PE'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1152 elif 'COFF' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1153 linkage = 'COFF'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1154 elif 'MS-DOS' in fileout:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1155 linkage = 'MSDOS'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1156 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1157 # 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
1158 pass
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1159
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1160 return bits,linkage
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1161
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1162 ### Portable uname() interface
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1163
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1164 _uname_cache = None
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1165
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1166 def uname():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1167
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1168 """ 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
1169 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
1170 identifying the underlying platform.
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 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
1173 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
1174
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1175 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
1176
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1177 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1178 global _uname_cache
47684
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1179 no_os_uname = 0
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1180
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1181 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
1182 return _uname_cache
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1183
47684
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1184 processor = ''
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1185
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1186 # 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
1187 try:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1188 system,node,release,version,machine = os.uname()
47684
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1189 except AttributeError:
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1190 no_os_uname = 1
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1191
47684
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1192 if no_os_uname or not filter(None, (system, node, release, version, machine)):
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1193 # Hmm, no there is either no uname or uname has returned
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1194 #'unknowns'... we'll have to poke around the system then.
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1195 if no_os_uname:
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1196 system = sys.platform
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1197 release = ''
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1198 version = ''
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1199 node = _node()
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1200 machine = ''
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1201
55251
29e7a4dd417c Use a different VER command output parser to address the localization
Marc-André Lemburg <mal@egenix.com>
parents: 55248
diff changeset
1202 use_syscmd_ver = 1
28761
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 # 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
1205 if system == 'win32':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1206 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
1207 if release and version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1208 use_syscmd_ver = 0
45958
d9ec068b08f3 If Mark Hammonds win32 tools are not available, try to use the _winreg module
Marc-André Lemburg <mal@egenix.com>
parents: 45708
diff changeset
1209 # Try to use the PROCESSOR_* environment variables
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1210 # available on Win XP and later; see
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1211 # http://support.microsoft.com/kb/888731 and
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1212 # http://www.geocities.com/rick_lively/MANUALS/ENV/MSWIN/PROCESSI.HTM
47684
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1213 if not machine:
59911
6df799a2c24e Issue #7860: platform.uname now reports the correct 'machine' type
R. David Murray <rdmurray@bitdance.com>
parents: 58780
diff changeset
1214 # WOW64 processes mask the native architecture
6df799a2c24e Issue #7860: platform.uname now reports the correct 'machine' type
R. David Murray <rdmurray@bitdance.com>
parents: 58780
diff changeset
1215 if "PROCESSOR_ARCHITEW6432" in os.environ:
6df799a2c24e Issue #7860: platform.uname now reports the correct 'machine' type
R. David Murray <rdmurray@bitdance.com>
parents: 58780
diff changeset
1216 machine = os.environ.get("PROCESSOR_ARCHITEW6432", '')
6df799a2c24e Issue #7860: platform.uname now reports the correct 'machine' type
R. David Murray <rdmurray@bitdance.com>
parents: 58780
diff changeset
1217 else:
6df799a2c24e Issue #7860: platform.uname now reports the correct 'machine' type
R. David Murray <rdmurray@bitdance.com>
parents: 58780
diff changeset
1218 machine = os.environ.get('PROCESSOR_ARCHITECTURE', '')
47684
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1219 if not processor:
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1220 processor = os.environ.get('PROCESSOR_IDENTIFIER', machine)
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1221
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1222 # 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
1223 # platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1224 if use_syscmd_ver:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1225 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
1226 # 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
1227 # (_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
1228 if system == 'Microsoft Windows':
27e712c8e1a3 Added normalization for Windows system name. Closes SF #945665.
Marc-André Lemburg <mal@egenix.com>
parents: 31969
diff changeset
1229 system = 'Windows'
42059
0459b88e14b4 Add patch #1726668: Windows Vista support.
Marc-André Lemburg <mal@egenix.com>
parents: 42058
diff changeset
1230 elif system == 'Microsoft' and release == 'Windows':
0459b88e14b4 Add patch #1726668: Windows Vista support.
Marc-André Lemburg <mal@egenix.com>
parents: 42058
diff changeset
1231 # Under Windows Vista and Windows Server 2008,
0459b88e14b4 Add patch #1726668: Windows Vista support.
Marc-André Lemburg <mal@egenix.com>
parents: 42058
diff changeset
1232 # Microsoft changed the output of the ver command. The
0459b88e14b4 Add patch #1726668: Windows Vista support.
Marc-André Lemburg <mal@egenix.com>
parents: 42058
diff changeset
1233 # release is no longer printed. This causes the
0459b88e14b4 Add patch #1726668: Windows Vista support.
Marc-André Lemburg <mal@egenix.com>
parents: 42058
diff changeset
1234 # system and release to be misidentified.
0459b88e14b4 Add patch #1726668: Windows Vista support.
Marc-André Lemburg <mal@egenix.com>
parents: 42058
diff changeset
1235 system = 'Windows'
0459b88e14b4 Add patch #1726668: Windows Vista support.
Marc-André Lemburg <mal@egenix.com>
parents: 42058
diff changeset
1236 if '6.0' == version[:3]:
0459b88e14b4 Add patch #1726668: Windows Vista support.
Marc-André Lemburg <mal@egenix.com>
parents: 42058
diff changeset
1237 release = 'Vista'
0459b88e14b4 Add patch #1726668: Windows Vista support.
Marc-André Lemburg <mal@egenix.com>
parents: 42058
diff changeset
1238 else:
0459b88e14b4 Add patch #1726668: Windows Vista support.
Marc-André Lemburg <mal@egenix.com>
parents: 42058
diff changeset
1239 release = ''
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1240
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1241 # 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
1242 # help ourselves
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1243 if system in ('win32','win16'):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1244 if not version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1245 if system == 'win32':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1246 version = '32bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1247 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1248 version = '16bit'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1249 system = 'Windows'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1250
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1251 elif system[:4] == 'java':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1252 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
1253 system = 'Java'
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1254 version = string.join(vminfo,', ')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1255 if not version:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1256 version = vendor
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1257
47684
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1258 # System specific extensions
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1259 if system == 'OpenVMS':
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1260 # OpenVMS seems to have release and version mixed up
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1261 if not release or release == '0':
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1262 release = version
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1263 version = ''
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1264 # Get processor information
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1265 try:
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1266 import vms_lib
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1267 except ImportError:
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1268 pass
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1269 else:
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1270 csid, cpu_number = vms_lib.getsyi('SYI$_CPU',0)
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1271 if (cpu_number >= 128):
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1272 processor = 'Alpha'
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1273 else:
47684
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1274 processor = 'VAX'
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1275 if not processor:
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1276 # Get processor information from the uname system command
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1277 processor = _syscmd_uname('-p','')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1278
47684
168c9e96772c platform.uname now tries to fill empty values even when os.uname is present
Benjamin Peterson <benjamin@python.org>
parents: 47165
diff changeset
1279 #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
1280 if system == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1281 system = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1282 if node == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1283 node = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1284 if release == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1285 release = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1286 if version == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1287 version = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1288 if machine == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1289 machine = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1290 if processor == 'unknown':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1291 processor = ''
43386
363203d75d69 issue1082: Fixing system and platform names for Vista.
Sean Reifscheider <jafo@tummy.com>
parents: 37797
diff changeset
1292
363203d75d69 issue1082: Fixing system and platform names for Vista.
Sean Reifscheider <jafo@tummy.com>
parents: 37797
diff changeset
1293 # normalize name
363203d75d69 issue1082: Fixing system and platform names for Vista.
Sean Reifscheider <jafo@tummy.com>
parents: 37797
diff changeset
1294 if system == 'Microsoft' and release == 'Windows':
363203d75d69 issue1082: Fixing system and platform names for Vista.
Sean Reifscheider <jafo@tummy.com>
parents: 37797
diff changeset
1295 system = 'Windows'
363203d75d69 issue1082: Fixing system and platform names for Vista.
Sean Reifscheider <jafo@tummy.com>
parents: 37797
diff changeset
1296 release = 'Vista'
363203d75d69 issue1082: Fixing system and platform names for Vista.
Sean Reifscheider <jafo@tummy.com>
parents: 37797
diff changeset
1297
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1298 _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
1299 return _uname_cache
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1300
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1301 ### 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
1302
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1303 def system():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1304
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1305 """ 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
1306
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1307 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
1308
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1309 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1310 return uname()[0]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1311
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1312 def node():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1313
30049
ae8485867d30 Touch-up to docstrings.
Brett Cannon <bcannon@gmail.com>
parents: 29657
diff changeset
1314 """ 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
1315 qualified)
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1316
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1317 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
1318
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1319 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1320 return uname()[1]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1321
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1322 def release():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1323
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1324 """ 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
1325
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1326 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
1327
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1328 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1329 return uname()[2]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1330
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1331 def version():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1332
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1333 """ 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
1334
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1335 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
1336
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1337 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1338 return uname()[3]
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1339
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1340 def machine():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1341
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1342 """ 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
1343
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1344 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
1345
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1346 """
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1347 return uname()[4]
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 processor():
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 (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
1352
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1353 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
1354 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
1355 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
1356 e.g. NetBSD does this.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1357
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 return uname()[5]
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 ### 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
1362
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1363 _sys_version_parser = re.compile(
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1364 r'([\w.+]+)\s*'
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1365 '\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*'
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1366 '\[([^\]]+)\]?')
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1367
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1368 _ironpython_sys_version_parser = re.compile(
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1369 r'IronPython\s*'
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1370 '([\d\.]+)'
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1371 '(?: \(([\d\.]+)\))?'
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1372 ' on (.NET [\d\.]+)')
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1373
52349
007e9c86fb55 add support for PyPy
Benjamin Peterson <benjamin@python.org>
parents: 52347
diff changeset
1374 _pypy_sys_version_parser = re.compile(
007e9c86fb55 add support for PyPy
Benjamin Peterson <benjamin@python.org>
parents: 52347
diff changeset
1375 r'([\w.+]+)\s*'
007e9c86fb55 add support for PyPy
Benjamin Peterson <benjamin@python.org>
parents: 52347
diff changeset
1376 '\(#?([^,]+),\s*([\w ]+),\s*([\w :]+)\)\s*'
007e9c86fb55 add support for PyPy
Benjamin Peterson <benjamin@python.org>
parents: 52347
diff changeset
1377 '\[PyPy [^\]]+\]?')
007e9c86fb55 add support for PyPy
Benjamin Peterson <benjamin@python.org>
parents: 52347
diff changeset
1378
40618
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1379 _sys_version_cache = {}
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1380
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1381 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
1382
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1383 """ Returns a parsed version of Python's sys.version as tuple
52332
8cd617c3e74b Merged revisions 70594-70595 via svnmerge from
Marc-André Lemburg <mal@egenix.com>
parents: 49011
diff changeset
1384 (name, version, branch, revision, buildno, builddate, compiler)
8cd617c3e74b Merged revisions 70594-70595 via svnmerge from
Marc-André Lemburg <mal@egenix.com>
parents: 49011
diff changeset
1385 referring to the Python implementation name, version, branch,
8cd617c3e74b Merged revisions 70594-70595 via svnmerge from
Marc-André Lemburg <mal@egenix.com>
parents: 49011
diff changeset
1386 revision, build number, build date/time as string and the compiler
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1387 identification string.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1388
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1389 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
1390 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
1391 defaults to '.0').
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1392
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1393 The function returns empty strings for tuple entries that
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1394 cannot be determined.
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1395
40618
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1396 sys_version may be given to parse an alternative version
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1397 string, e.g. if the version was read from a different Python
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1398 interpreter.
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1399
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1400 """
40618
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1401 # Get the Python version
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1402 if sys_version is None:
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1403 sys_version = sys.version
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1404
40618
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1405 # Try the cache first
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1406 result = _sys_version_cache.get(sys_version, None)
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1407 if result is not None:
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1408 return result
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1409
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1410 # Parse it
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1411 if sys_version[:10] == 'IronPython':
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1412 # IronPython
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1413 name = 'IronPython'
40618
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1414 match = _ironpython_sys_version_parser.match(sys_version)
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1415 if match is None:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1416 raise ValueError(
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1417 'failed to parse IronPython sys.version: %s' %
40618
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1418 repr(sys_version))
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1419 version, alt_version, compiler = match.groups()
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1420 buildno = ''
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1421 builddate = ''
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1422
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1423 elif sys.platform[:4] == 'java':
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1424 # Jython
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1425 name = 'Jython'
52346
1e2335962bad add much better tests for python version information parsing
Benjamin Peterson <benjamin@python.org>
parents: 52330
diff changeset
1426 match = _sys_version_parser.match(sys_version)
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1427 if match is None:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1428 raise ValueError(
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1429 'failed to parse Jython sys.version: %s' %
40618
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1430 repr(sys_version))
52346
1e2335962bad add much better tests for python version information parsing
Benjamin Peterson <benjamin@python.org>
parents: 52330
diff changeset
1431 version, buildno, builddate, buildtime, _ = match.groups()
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1432 compiler = sys.platform
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1433
52349
007e9c86fb55 add support for PyPy
Benjamin Peterson <benjamin@python.org>
parents: 52347
diff changeset
1434 elif "PyPy" in sys_version:
007e9c86fb55 add support for PyPy
Benjamin Peterson <benjamin@python.org>
parents: 52347
diff changeset
1435 # PyPy
007e9c86fb55 add support for PyPy
Benjamin Peterson <benjamin@python.org>
parents: 52347
diff changeset
1436 name = "PyPy"
007e9c86fb55 add support for PyPy
Benjamin Peterson <benjamin@python.org>
parents: 52347
diff changeset
1437 match = _pypy_sys_version_parser.match(sys_version)
007e9c86fb55 add support for PyPy
Benjamin Peterson <benjamin@python.org>
parents: 52347
diff changeset
1438 if match is None:
007e9c86fb55 add support for PyPy
Benjamin Peterson <benjamin@python.org>
parents: 52347
diff changeset
1439 raise ValueError("failed to parse PyPy sys.version: %s" %
007e9c86fb55 add support for PyPy
Benjamin Peterson <benjamin@python.org>
parents: 52347
diff changeset
1440 repr(sys_version))
007e9c86fb55 add support for PyPy
Benjamin Peterson <benjamin@python.org>
parents: 52347
diff changeset
1441 version, buildno, builddate, buildtime = match.groups()
007e9c86fb55 add support for PyPy
Benjamin Peterson <benjamin@python.org>
parents: 52347
diff changeset
1442 compiler = ""
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1443
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1444 else:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1445 # CPython
40618
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1446 match = _sys_version_parser.match(sys_version)
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1447 if match is None:
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1448 raise ValueError(
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1449 'failed to parse CPython sys.version: %s' %
40618
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1450 repr(sys_version))
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1451 version, buildno, builddate, buildtime, compiler = \
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1452 match.groups()
52347
78fedc342a6b more and more implementations now support sys.subversion
Benjamin Peterson <benjamin@python.org>
parents: 52346
diff changeset
1453 name = 'CPython'
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1454 builddate = builddate + ' ' + buildtime
40618
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1455
52347
78fedc342a6b more and more implementations now support sys.subversion
Benjamin Peterson <benjamin@python.org>
parents: 52346
diff changeset
1456 if hasattr(sys, 'subversion'):
78fedc342a6b more and more implementations now support sys.subversion
Benjamin Peterson <benjamin@python.org>
parents: 52346
diff changeset
1457 # sys.subversion was added in Python 2.5
78fedc342a6b more and more implementations now support sys.subversion
Benjamin Peterson <benjamin@python.org>
parents: 52346
diff changeset
1458 _, branch, revision = sys.subversion
78fedc342a6b more and more implementations now support sys.subversion
Benjamin Peterson <benjamin@python.org>
parents: 52346
diff changeset
1459 else:
78fedc342a6b more and more implementations now support sys.subversion
Benjamin Peterson <benjamin@python.org>
parents: 52346
diff changeset
1460 branch = ''
78fedc342a6b more and more implementations now support sys.subversion
Benjamin Peterson <benjamin@python.org>
parents: 52346
diff changeset
1461 revision = ''
78fedc342a6b more and more implementations now support sys.subversion
Benjamin Peterson <benjamin@python.org>
parents: 52346
diff changeset
1462
40618
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1463 # Add the patchlevel version if missing
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1464 l = string.split(version, '.')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1465 if len(l) == 2:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1466 l.append('0')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1467 version = string.join(l, '.')
40618
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1468
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1469 # Build and cache the result
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1470 result = (name, version, branch, revision, buildno, builddate, compiler)
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1471 _sys_version_cache[sys_version] = result
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1472 return result
68b41c2d6663 Add parameter sys_version to _sys_version().
Marc-André Lemburg <mal@egenix.com>
parents: 40617
diff changeset
1473
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1474 def python_implementation():
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1475
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1476 """ Returns a string identifying the Python implementation.
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1477
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1478 Currently, the following implementations are identified:
69827
affec521b330 #11985: update docstring of platform.python_implementation.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68588
diff changeset
1479 'CPython' (C implementation of Python),
affec521b330 #11985: update docstring of platform.python_implementation.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68588
diff changeset
1480 'IronPython' (.NET implementation of Python),
affec521b330 #11985: update docstring of platform.python_implementation.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68588
diff changeset
1481 'Jython' (Java implementation of Python),
affec521b330 #11985: update docstring of platform.python_implementation.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 68588
diff changeset
1482 'PyPy' (Python implementation of Python).
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1483
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1484 """
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1485 return _sys_version()[0]
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1486
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1487 def python_version():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1488
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1489 """ 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
1490
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1491 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
1492 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
1493
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1494 """
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1495 return _sys_version()[1]
28761
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 def python_version_tuple():
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 """ 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
1500 of strings.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1501
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1502 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
1503 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
1504
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1505 """
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1506 return tuple(string.split(_sys_version()[1], '.'))
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1507
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1508 def python_branch():
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1509
40617
2a476c94be20 Fix grammar in docstrings
Neal Norwitz <nnorwitz@gmail.com>
parents: 40616
diff changeset
1510 """ Returns a string identifying the Python implementation
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1511 branch.
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1512
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1513 For CPython this is the Subversion branch from which the
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1514 Python binary was built.
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1515
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1516 If not available, an empty string is returned.
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1517
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1518 """
40732
5dae0d7f683a Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 40622
diff changeset
1519
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1520 return _sys_version()[2]
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1521
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1522 def python_revision():
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1523
40617
2a476c94be20 Fix grammar in docstrings
Neal Norwitz <nnorwitz@gmail.com>
parents: 40616
diff changeset
1524 """ Returns a string identifying the Python implementation
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1525 revision.
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1526
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1527 For CPython this is the Subversion revision from which the
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1528 Python binary was built.
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1529
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1530 If not available, an empty string is returned.
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1531
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1532 """
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1533 return _sys_version()[3]
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1534
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1535 def python_build():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1536
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1537 """ 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
1538 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
1539
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1540 """
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1541 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
1542
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1543 def python_compiler():
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1544
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1545 """ 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
1546 Python.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1547
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1548 """
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1549 return _sys_version()[6]
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1550
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1551 ### 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
1552
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
1553 _platform_cache = {}
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1554
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1555 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
1556
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1557 """ 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
1558 with as much useful information as possible (but no more :).
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1559
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1560 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
1561 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
1562 platforms and this is intended.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1563
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1564 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
1565 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
1566 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
1567 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
1568 this.
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1569
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1570 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
1571 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
1572
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1573 """
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
1574 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
1575 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
1576 return result
28761
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1577
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1578 # 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
1579 # to it...
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1580 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
1581 if machine == processor:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1582 processor = ''
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1583 if aliased:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1584 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
1585
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1586 if system == 'Windows':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1587 # MS platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1588 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
1589 if terse:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1590 platform = _platform(system,release)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1591 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1592 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
1593
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1594 elif system in ('Linux',):
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1595 # Linux based systems
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1596 distname,distversion,distid = dist('')
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1597 if distname and not terse:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1598 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
1599 'with',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1600 distname,distversion,distid)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1601 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1602 # 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
1603 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
1604 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
1605 'with',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1606 libcname+libcversion)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1607 elif system == 'Java':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1608 # Java platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1609 r,v,vminfo,(os_name,os_version,os_arch) = java_ver()
40616
ed7acf1881a9 Bump version number and change copyright year.
Marc-André Lemburg <mal@egenix.com>
parents: 37797
diff changeset
1610 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
1611 platform = _platform(system,release,version)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1612 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1613 platform = _platform(system,release,version,
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1614 'on',
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1615 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
1616
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1617 elif system == 'MacOS':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1618 # MacOS platforms
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1619 if terse:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1620 platform = _platform(system,release)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1621 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1622 platform = _platform(system,release,machine)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1623
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1624 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1625 # Generic handler
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1626 if terse:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1627 platform = _platform(system,release)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1628 else:
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1629 bits,linkage = architecture(sys.executable)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1630 platform = _platform(system,release,machine,processor,bits,linkage)
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1631
31819
168dacfbee65 Added more Windows version names (thanks to Thomas Heller).
Marc-André Lemburg <mal@egenix.com>
parents: 31818
diff changeset
1632 _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
1633 return platform
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1634
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1635 ### Command line interface
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1636
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1637 if __name__ == '__main__':
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1638 # Default is to print the aliased verbose platform string
28774
c9bee11eaa8b Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 28762
diff changeset
1639 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
1640 aliased = (not 'nonaliased' in sys.argv and not '--nonaliased' in sys.argv)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1641 print platform(aliased,terse)
171dbddf0a02 New module platform.py, submitted by Marc-Andre Lemburg.
Marc-André Lemburg <mal@egenix.com>
parents:
diff changeset
1642 sys.exit(0)