mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			361 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			361 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| :mod:`!platform` ---  Access to underlying platform's identifying data
 | ||
| ======================================================================
 | ||
| 
 | ||
| .. module:: platform
 | ||
|    :synopsis: Retrieves as much platform identifying data as possible.
 | ||
| 
 | ||
| .. moduleauthor:: Marc-André Lemburg <mal@egenix.com>
 | ||
| .. sectionauthor:: Bjorn Pettersen <bpettersen@corp.fairisaac.com>
 | ||
| 
 | ||
| **Source code:** :source:`Lib/platform.py`
 | ||
| 
 | ||
| --------------
 | ||
| 
 | ||
| .. note::
 | ||
| 
 | ||
|    Specific platforms listed alphabetically, with Linux included in the Unix
 | ||
|    section.
 | ||
| 
 | ||
| 
 | ||
| Cross Platform
 | ||
| --------------
 | ||
| 
 | ||
| 
 | ||
| .. function:: architecture(executable=sys.executable, bits='', linkage='')
 | ||
| 
 | ||
|    Queries the given executable (defaults to the Python interpreter binary) for
 | ||
|    various architecture information.
 | ||
| 
 | ||
|    Returns a tuple ``(bits, linkage)`` which contain information about the bit
 | ||
|    architecture and the linkage format used for the executable. Both values are
 | ||
|    returned as strings.
 | ||
| 
 | ||
|    Values that cannot be determined are returned as given by the parameter presets.
 | ||
|    If bits is given as ``''``, the ``sizeof(pointer)`` (or
 | ||
|    ``sizeof(long)`` on Python version < 1.5.2) is used as indicator for the
 | ||
|    supported pointer size.
 | ||
| 
 | ||
|    The function relies on the system's :file:`file` command to do the actual work.
 | ||
|    This is available on most if not all Unix  platforms and some non-Unix platforms
 | ||
|    and then only if the executable points to the Python interpreter.  Reasonable
 | ||
|    defaults are used when the above needs are not met.
 | ||
| 
 | ||
|    .. note::
 | ||
| 
 | ||
|       On macOS (and perhaps other platforms), executable files may be
 | ||
|       universal files containing multiple architectures.
 | ||
| 
 | ||
|       To get at the "64-bitness" of the current interpreter, it is more
 | ||
|       reliable to query the :data:`sys.maxsize` attribute::
 | ||
| 
 | ||
|          is_64bits = sys.maxsize > 2**32
 | ||
| 
 | ||
| 
 | ||
| .. function:: machine()
 | ||
| 
 | ||
|    Returns the machine type, e.g. ``'AMD64'``. An empty string is returned if the
 | ||
|    value cannot be determined.
 | ||
| 
 | ||
| 
 | ||
| .. function:: node()
 | ||
| 
 | ||
|    Returns the computer's network name (may not be fully qualified!). An empty
 | ||
|    string is returned if the value cannot be determined.
 | ||
| 
 | ||
| 
 | ||
| .. function:: platform(aliased=False, terse=False)
 | ||
| 
 | ||
|    Returns a single string identifying the underlying platform with as much useful
 | ||
|    information as possible.
 | ||
| 
 | ||
|    The output is intended to be *human readable* rather than machine parseable. It
 | ||
|    may look different on different platforms and this is intended.
 | ||
| 
 | ||
|    If *aliased* is true, the function will use aliases for various platforms that
 | ||
|    report system names which differ from their common names, for example SunOS will
 | ||
|    be reported as Solaris.  The :func:`system_alias` function is used to implement
 | ||
|    this.
 | ||
| 
 | ||
|    Setting *terse* to true causes the function to return only the absolute minimum
 | ||
|    information needed to identify the platform.
 | ||
| 
 | ||
|    .. versionchanged:: 3.8
 | ||
|       On macOS, the function now uses :func:`mac_ver`, if it returns a
 | ||
|       non-empty release string, to get the macOS version rather than the darwin
 | ||
|       version.
 | ||
| 
 | ||
| 
 | ||
| .. function:: processor()
 | ||
| 
 | ||
|    Returns the (real) processor name, e.g. ``'amdk6'``.
 | ||
| 
 | ||
|    An empty string is returned if the value cannot be determined. Note that many
 | ||
|    platforms do not provide this information or simply return the same value as for
 | ||
|    :func:`machine`.  NetBSD does this.
 | ||
| 
 | ||
| 
 | ||
| .. function:: python_build()
 | ||
| 
 | ||
|    Returns a tuple ``(buildno, builddate)`` stating the Python build number and
 | ||
|    date as strings.
 | ||
| 
 | ||
| 
 | ||
| .. function:: python_compiler()
 | ||
| 
 | ||
|    Returns a string identifying the compiler used for compiling Python.
 | ||
| 
 | ||
| 
 | ||
| .. function:: python_branch()
 | ||
| 
 | ||
|    Returns a string identifying the Python implementation SCM branch.
 | ||
| 
 | ||
| 
 | ||
| .. function:: python_implementation()
 | ||
| 
 | ||
|    Returns a string identifying the Python implementation. Possible return values
 | ||
|    are: 'CPython', 'IronPython', 'Jython', 'PyPy'.
 | ||
| 
 | ||
| 
 | ||
| .. function:: python_revision()
 | ||
| 
 | ||
|    Returns a string identifying the Python implementation SCM revision.
 | ||
| 
 | ||
| 
 | ||
| .. function:: python_version()
 | ||
| 
 | ||
|    Returns the Python version as string ``'major.minor.patchlevel'``.
 | ||
| 
 | ||
|    Note that unlike the Python ``sys.version``, the returned value will always
 | ||
|    include the patchlevel (it defaults to 0).
 | ||
| 
 | ||
| 
 | ||
| .. function:: python_version_tuple()
 | ||
| 
 | ||
|    Returns the Python version as tuple ``(major, minor, patchlevel)`` of strings.
 | ||
| 
 | ||
|    Note that unlike the Python ``sys.version``, the returned value will always
 | ||
|    include the patchlevel (it defaults to ``'0'``).
 | ||
| 
 | ||
| 
 | ||
| .. function:: release()
 | ||
| 
 | ||
|    Returns the system's release, e.g. ``'2.2.0'`` or ``'NT'``. An empty string is
 | ||
|    returned if the value cannot be determined.
 | ||
| 
 | ||
| 
 | ||
| .. function:: system()
 | ||
| 
 | ||
|    Returns the system/OS name, such as ``'Linux'``, ``'Darwin'``, ``'Java'``,
 | ||
|    ``'Windows'``. An empty string is returned if the value cannot be determined.
 | ||
| 
 | ||
|    On iOS and Android, this returns the user-facing OS name (i.e, ``'iOS``,
 | ||
|    ``'iPadOS'`` or ``'Android'``). To obtain the kernel name (``'Darwin'`` or
 | ||
|    ``'Linux'``), use :func:`os.uname()`.
 | ||
| 
 | ||
| .. function:: system_alias(system, release, version)
 | ||
| 
 | ||
|    Returns ``(system, release, version)`` aliased to common marketing names used
 | ||
|    for some systems.  It also does some reordering of the information in some cases
 | ||
|    where it would otherwise cause confusion.
 | ||
| 
 | ||
| 
 | ||
| .. function:: version()
 | ||
| 
 | ||
|    Returns the system's release version, e.g. ``'#3 on degas'``. An empty string is
 | ||
|    returned if the value cannot be determined.
 | ||
| 
 | ||
|    On iOS and Android, this is the user-facing OS version. To obtain the
 | ||
|    Darwin or Linux kernel version, use :func:`os.uname()`.
 | ||
| 
 | ||
| .. function:: uname()
 | ||
| 
 | ||
|    Fairly portable uname interface. Returns a :func:`~collections.namedtuple`
 | ||
|    containing six attributes: :attr:`system`, :attr:`node`, :attr:`release`,
 | ||
|    :attr:`version`, :attr:`machine`, and :attr:`processor`.
 | ||
| 
 | ||
|    :attr:`processor` is resolved late, on demand.
 | ||
| 
 | ||
|    Note: the first two attribute names differ from the names presented by
 | ||
|    :func:`os.uname`, where they are named :attr:`sysname` and
 | ||
|    :attr:`nodename`.
 | ||
| 
 | ||
|    Entries which cannot be determined are set to ``''``.
 | ||
| 
 | ||
|    .. versionchanged:: 3.3
 | ||
|       Result changed from a tuple to a :func:`~collections.namedtuple`.
 | ||
| 
 | ||
|    .. versionchanged:: 3.9
 | ||
|       :attr:`processor` is resolved late instead of immediately.
 | ||
| 
 | ||
| 
 | ||
| Java Platform
 | ||
| -------------
 | ||
| 
 | ||
| 
 | ||
| .. function:: java_ver(release='', vendor='', vminfo=('','',''), osinfo=('','',''))
 | ||
| 
 | ||
|    Version interface for Jython.
 | ||
| 
 | ||
|    Returns a tuple ``(release, vendor, vminfo, osinfo)`` with *vminfo* being a
 | ||
|    tuple ``(vm_name, vm_release, vm_vendor)`` and *osinfo* being a tuple
 | ||
|    ``(os_name, os_version, os_arch)``. Values which cannot be determined are set to
 | ||
|    the defaults given as parameters (which all default to ``''``).
 | ||
| 
 | ||
|    .. deprecated-removed:: 3.13 3.15
 | ||
|       It was largely untested, had a confusing API,
 | ||
|       and was only useful for Jython support.
 | ||
| 
 | ||
| 
 | ||
| Windows Platform
 | ||
| ----------------
 | ||
| 
 | ||
| 
 | ||
| .. function:: win32_ver(release='', version='', csd='', ptype='')
 | ||
| 
 | ||
|    Get additional version information from the Windows Registry and return a tuple
 | ||
|    ``(release, version, csd, ptype)`` referring to OS release, version number,
 | ||
|    CSD level (service pack) and OS type (multi/single processor). Values which
 | ||
|    cannot be determined are set to the defaults given as parameters (which all
 | ||
|    default to an empty string).
 | ||
| 
 | ||
|    As a hint: *ptype* is ``'Uniprocessor Free'`` on single processor NT machines
 | ||
|    and ``'Multiprocessor Free'`` on multi processor machines. The ``'Free'`` refers
 | ||
|    to the OS version being free of debugging code. It could also state ``'Checked'``
 | ||
|    which means the OS version uses debugging code, i.e. code that checks arguments,
 | ||
|    ranges, etc.
 | ||
| 
 | ||
| .. function:: win32_edition()
 | ||
| 
 | ||
|    Returns a string representing the current Windows edition, or ``None`` if the
 | ||
|    value cannot be determined.  Possible values include but are not limited to
 | ||
|    ``'Enterprise'``, ``'IoTUAP'``, ``'ServerStandard'``, and ``'nanoserver'``.
 | ||
| 
 | ||
|    .. versionadded:: 3.8
 | ||
| 
 | ||
| .. function:: win32_is_iot()
 | ||
| 
 | ||
|    Return ``True`` if the Windows edition returned by :func:`win32_edition`
 | ||
|    is recognized as an IoT edition.
 | ||
| 
 | ||
|    .. versionadded:: 3.8
 | ||
| 
 | ||
| 
 | ||
| macOS Platform
 | ||
| --------------
 | ||
| 
 | ||
| .. function:: mac_ver(release='', versioninfo=('','',''), machine='')
 | ||
| 
 | ||
|    Get macOS version information and return it as tuple ``(release, versioninfo,
 | ||
|    machine)`` with *versioninfo* being a tuple ``(version, dev_stage,
 | ||
|    non_release_version)``.
 | ||
| 
 | ||
|    Entries which cannot be determined are set to ``''``.  All tuple entries are
 | ||
|    strings.
 | ||
| 
 | ||
| iOS Platform
 | ||
| ------------
 | ||
| 
 | ||
| .. function:: ios_ver(system='', release='', model='', is_simulator=False)
 | ||
| 
 | ||
|    Get iOS version information and return it as a
 | ||
|    :func:`~collections.namedtuple` with the following attributes:
 | ||
| 
 | ||
|    * ``system`` is the OS name; either ``'iOS'`` or ``'iPadOS'``.
 | ||
|    * ``release`` is the iOS version number as a string (e.g., ``'17.2'``).
 | ||
|    * ``model`` is the device model identifier; this will be a string like
 | ||
|      ``'iPhone13,2'`` for a physical device, or ``'iPhone'`` on a simulator.
 | ||
|    * ``is_simulator`` is a boolean describing if the app is running on a
 | ||
|      simulator or a physical device.
 | ||
| 
 | ||
|    Entries which cannot be determined are set to the defaults given as
 | ||
|    parameters.
 | ||
| 
 | ||
| 
 | ||
| Unix Platforms
 | ||
| --------------
 | ||
| 
 | ||
| .. function:: libc_ver(executable=sys.executable, lib='', version='', chunksize=16384)
 | ||
| 
 | ||
|    Tries to determine the libc version against which the file executable (defaults
 | ||
|    to the Python interpreter) is linked.  Returns a tuple of strings ``(lib,
 | ||
|    version)`` which default to the given parameters in case the lookup fails.
 | ||
| 
 | ||
|    Note that this function has intimate knowledge of how different libc versions
 | ||
|    add symbols to the executable is probably only usable for executables compiled
 | ||
|    using :program:`gcc`.
 | ||
| 
 | ||
|    The file is read and scanned in chunks of *chunksize* bytes.
 | ||
| 
 | ||
| 
 | ||
| Linux Platforms
 | ||
| ---------------
 | ||
| 
 | ||
| .. function:: freedesktop_os_release()
 | ||
| 
 | ||
|    Get operating system identification from ``os-release`` file and return
 | ||
|    it as a dict. The ``os-release`` file is a `freedesktop.org standard
 | ||
|    <https://www.freedesktop.org/software/systemd/man/os-release.html>`_ and
 | ||
|    is available in most Linux distributions. A noticeable exception is
 | ||
|    Android and Android-based distributions.
 | ||
| 
 | ||
|    Raises :exc:`OSError` or subclass when neither ``/etc/os-release`` nor
 | ||
|    ``/usr/lib/os-release`` can be read.
 | ||
| 
 | ||
|    On success, the function returns a dictionary where keys and values are
 | ||
|    strings. Values have their special characters like ``"`` and ``$``
 | ||
|    unquoted. The fields ``NAME``, ``ID``, and ``PRETTY_NAME`` are always
 | ||
|    defined according to the standard. All other fields are optional. Vendors
 | ||
|    may include additional fields.
 | ||
| 
 | ||
|    Note that fields like ``NAME``, ``VERSION``, and ``VARIANT`` are strings
 | ||
|    suitable for presentation to users. Programs should use fields like
 | ||
|    ``ID``, ``ID_LIKE``, ``VERSION_ID``, or ``VARIANT_ID`` to identify
 | ||
|    Linux distributions.
 | ||
| 
 | ||
|    Example::
 | ||
| 
 | ||
|       def get_like_distro():
 | ||
|           info = platform.freedesktop_os_release()
 | ||
|           ids = [info["ID"]]
 | ||
|           if "ID_LIKE" in info:
 | ||
|               # ids are space separated and ordered by precedence
 | ||
|               ids.extend(info["ID_LIKE"].split())
 | ||
|           return ids
 | ||
| 
 | ||
|    .. versionadded:: 3.10
 | ||
| 
 | ||
| 
 | ||
| Android Platform
 | ||
| ----------------
 | ||
| 
 | ||
| .. function:: android_ver(release="", api_level=0, manufacturer="", \
 | ||
|                           model="", device="", is_emulator=False)
 | ||
| 
 | ||
|    Get Android device information. Returns a :func:`~collections.namedtuple`
 | ||
|    with the following attributes. Values which cannot be determined are set to
 | ||
|    the defaults given as parameters.
 | ||
| 
 | ||
|    * ``release`` - Android version, as a string (e.g. ``"14"``).
 | ||
| 
 | ||
|    * ``api_level`` - API level of the running device, as an integer (e.g. ``34``
 | ||
|      for Android 14). To get the API level which Python was built against, see
 | ||
|      :func:`sys.getandroidapilevel`.
 | ||
| 
 | ||
|    * ``manufacturer`` - `Manufacturer name
 | ||
|      <https://developer.android.com/reference/android/os/Build#MANUFACTURER>`__.
 | ||
| 
 | ||
|    * ``model`` - `Model name
 | ||
|      <https://developer.android.com/reference/android/os/Build#MODEL>`__ –
 | ||
|      typically the marketing name or model number.
 | ||
| 
 | ||
|    * ``device`` - `Device name
 | ||
|      <https://developer.android.com/reference/android/os/Build#DEVICE>`__ –
 | ||
|      typically the model number or a codename.
 | ||
| 
 | ||
|    * ``is_emulator`` - ``True`` if the device is an emulator; ``False`` if it's
 | ||
|      a physical device.
 | ||
| 
 | ||
|    Google maintains a `list of known model and device names
 | ||
|    <https://storage.googleapis.com/play_public/supported_devices.html>`__.
 | ||
| 
 | ||
|    .. versionadded:: 3.13
 | 
