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