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