17db96d56Sopenharmony_ci:mod:`sys` --- System-specific parameters and functions
27db96d56Sopenharmony_ci=======================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: sys
57db96d56Sopenharmony_ci   :synopsis: Access system-specific parameters and functions.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci--------------
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ciThis module provides access to some variables used or maintained by the
107db96d56Sopenharmony_ciinterpreter and to functions that interact strongly with the interpreter. It is
117db96d56Sopenharmony_cialways available.
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci.. data:: abiflags
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci   On POSIX systems where Python was built with the standard ``configure``
177db96d56Sopenharmony_ci   script, this contains the ABI flags as specified by :pep:`3149`.
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci   .. versionchanged:: 3.8
207db96d56Sopenharmony_ci      Default flags became an empty string (``m`` flag for pymalloc has been
217db96d56Sopenharmony_ci      removed).
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ci   .. versionadded:: 3.2
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci.. function:: addaudithook(hook)
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ci   Append the callable *hook* to the list of active auditing hooks for the
297db96d56Sopenharmony_ci   current (sub)interpreter.
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci   When an auditing event is raised through the :func:`sys.audit` function, each
327db96d56Sopenharmony_ci   hook will be called in the order it was added with the event name and the
337db96d56Sopenharmony_ci   tuple of arguments. Native hooks added by :c:func:`PySys_AddAuditHook` are
347db96d56Sopenharmony_ci   called first, followed by hooks added in the current (sub)interpreter.  Hooks
357db96d56Sopenharmony_ci   can then log the event, raise an exception to abort the operation,
367db96d56Sopenharmony_ci   or terminate the process entirely.
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci   Note that audit hooks are primarily for collecting information about internal
397db96d56Sopenharmony_ci   or otherwise unobservable actions, whether by Python or libraries written in
407db96d56Sopenharmony_ci   Python. They are not suitable for implementing a "sandbox". In particular,
417db96d56Sopenharmony_ci   malicious code can trivially disable or bypass hooks added using this
427db96d56Sopenharmony_ci   function. At a minimum, any security-sensitive hooks must be added using the
437db96d56Sopenharmony_ci   C API :c:func:`PySys_AddAuditHook` before initialising the runtime, and any
447db96d56Sopenharmony_ci   modules allowing arbitrary memory modification (such as :mod:`ctypes`) should
457db96d56Sopenharmony_ci   be completely removed or closely monitored.
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci   .. audit-event:: sys.addaudithook "" sys.addaudithook
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci      Calling :func:`sys.addaudithook` will itself raise an auditing event
507db96d56Sopenharmony_ci      named ``sys.addaudithook`` with no arguments. If any
517db96d56Sopenharmony_ci      existing hooks raise an exception derived from :class:`RuntimeError`, the
527db96d56Sopenharmony_ci      new hook will not be added and the exception suppressed. As a result,
537db96d56Sopenharmony_ci      callers cannot assume that their hook has been added unless they control
547db96d56Sopenharmony_ci      all existing hooks.
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci   See the :ref:`audit events table <audit-events>` for all events raised by
577db96d56Sopenharmony_ci   CPython, and :pep:`578` for the original design discussion.
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci   .. versionadded:: 3.8
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ci   .. versionchanged:: 3.8.1
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci      Exceptions derived from :class:`Exception` but not :class:`RuntimeError`
647db96d56Sopenharmony_ci      are no longer suppressed.
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci   .. impl-detail::
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci      When tracing is enabled (see :func:`settrace`), Python hooks are only
697db96d56Sopenharmony_ci      traced if the callable has a ``__cantrace__`` member that is set to a
707db96d56Sopenharmony_ci      true value. Otherwise, trace functions will skip the hook.
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ci.. data:: argv
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci   The list of command line arguments passed to a Python script. ``argv[0]`` is the
767db96d56Sopenharmony_ci   script name (it is operating system dependent whether this is a full pathname or
777db96d56Sopenharmony_ci   not).  If the command was executed using the :option:`-c` command line option to
787db96d56Sopenharmony_ci   the interpreter, ``argv[0]`` is set to the string ``'-c'``.  If no script name
797db96d56Sopenharmony_ci   was passed to the Python interpreter, ``argv[0]`` is the empty string.
807db96d56Sopenharmony_ci
817db96d56Sopenharmony_ci   To loop over the standard input, or the list of files given on the
827db96d56Sopenharmony_ci   command line, see the :mod:`fileinput` module.
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci   See also :data:`sys.orig_argv`.
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_ci   .. note::
877db96d56Sopenharmony_ci      On Unix, command line arguments are passed by bytes from OS.  Python decodes
887db96d56Sopenharmony_ci      them with filesystem encoding and "surrogateescape" error handler.
897db96d56Sopenharmony_ci      When you need original bytes, you can get it by
907db96d56Sopenharmony_ci      ``[os.fsencode(arg) for arg in sys.argv]``.
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci.. _auditing:
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci.. function:: audit(event, *args)
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci   .. index:: single: auditing
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci   Raise an auditing event and trigger any active auditing hooks.
1007db96d56Sopenharmony_ci   *event* is a string identifying the event, and *args* may contain
1017db96d56Sopenharmony_ci   optional arguments with more information about the event.  The
1027db96d56Sopenharmony_ci   number and types of arguments for a given event are considered a
1037db96d56Sopenharmony_ci   public and stable API and should not be modified between releases.
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci   For example, one auditing event is named ``os.chdir``. This event has
1067db96d56Sopenharmony_ci   one argument called *path* that will contain the requested new
1077db96d56Sopenharmony_ci   working directory.
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci   :func:`sys.audit` will call the existing auditing hooks, passing
1107db96d56Sopenharmony_ci   the event name and arguments, and will re-raise the first exception
1117db96d56Sopenharmony_ci   from any hook. In general, if an exception is raised, it should not
1127db96d56Sopenharmony_ci   be handled and the process should be terminated as quickly as
1137db96d56Sopenharmony_ci   possible. This allows hook implementations to decide how to respond
1147db96d56Sopenharmony_ci   to particular events: they can merely log the event or abort the
1157db96d56Sopenharmony_ci   operation by raising an exception.
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci   Hooks are added using the :func:`sys.addaudithook` or
1187db96d56Sopenharmony_ci   :c:func:`PySys_AddAuditHook` functions.
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ci   The native equivalent of this function is :c:func:`PySys_Audit`. Using the
1217db96d56Sopenharmony_ci   native function is preferred when possible.
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci   See the :ref:`audit events table <audit-events>` for all events raised by
1247db96d56Sopenharmony_ci   CPython.
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci   .. versionadded:: 3.8
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci.. data:: base_exec_prefix
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci   Set during Python startup, before ``site.py`` is run, to the same value as
1327db96d56Sopenharmony_ci   :data:`exec_prefix`. If not running in a
1337db96d56Sopenharmony_ci   :ref:`virtual environment <venv-def>`, the values will stay the same; if
1347db96d56Sopenharmony_ci   ``site.py`` finds that a virtual environment is in use, the values of
1357db96d56Sopenharmony_ci   :data:`prefix` and :data:`exec_prefix` will be changed to point to the
1367db96d56Sopenharmony_ci   virtual environment, whereas :data:`base_prefix` and
1377db96d56Sopenharmony_ci   :data:`base_exec_prefix` will remain pointing to the base Python
1387db96d56Sopenharmony_ci   installation (the one which the virtual environment was created from).
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci   .. versionadded:: 3.3
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci
1437db96d56Sopenharmony_ci.. data:: base_prefix
1447db96d56Sopenharmony_ci
1457db96d56Sopenharmony_ci   Set during Python startup, before ``site.py`` is run, to the same value as
1467db96d56Sopenharmony_ci   :data:`prefix`. If not running in a :ref:`virtual environment <venv-def>`, the values
1477db96d56Sopenharmony_ci   will stay the same; if ``site.py`` finds that a virtual environment is in
1487db96d56Sopenharmony_ci   use, the values of :data:`prefix` and :data:`exec_prefix` will be changed to
1497db96d56Sopenharmony_ci   point to the virtual environment, whereas :data:`base_prefix` and
1507db96d56Sopenharmony_ci   :data:`base_exec_prefix` will remain pointing to the base Python
1517db96d56Sopenharmony_ci   installation (the one which the virtual environment was created from).
1527db96d56Sopenharmony_ci
1537db96d56Sopenharmony_ci   .. versionadded:: 3.3
1547db96d56Sopenharmony_ci
1557db96d56Sopenharmony_ci
1567db96d56Sopenharmony_ci.. data:: byteorder
1577db96d56Sopenharmony_ci
1587db96d56Sopenharmony_ci   An indicator of the native byte order.  This will have the value ``'big'`` on
1597db96d56Sopenharmony_ci   big-endian (most-significant byte first) platforms, and ``'little'`` on
1607db96d56Sopenharmony_ci   little-endian (least-significant byte first) platforms.
1617db96d56Sopenharmony_ci
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci.. data:: builtin_module_names
1647db96d56Sopenharmony_ci
1657db96d56Sopenharmony_ci   A tuple of strings containing the names of all modules that are compiled into this
1667db96d56Sopenharmony_ci   Python interpreter.  (This information is not available in any other way ---
1677db96d56Sopenharmony_ci   ``modules.keys()`` only lists the imported modules.)
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ci   See also the :attr:`sys.stdlib_module_names` list.
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci.. function:: call_tracing(func, args)
1737db96d56Sopenharmony_ci
1747db96d56Sopenharmony_ci   Call ``func(*args)``, while tracing is enabled.  The tracing state is saved,
1757db96d56Sopenharmony_ci   and restored afterwards.  This is intended to be called from a debugger from
1767db96d56Sopenharmony_ci   a checkpoint, to recursively debug some other code.
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci
1797db96d56Sopenharmony_ci.. data:: copyright
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci   A string containing the copyright pertaining to the Python interpreter.
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci.. function:: _clear_type_cache()
1857db96d56Sopenharmony_ci
1867db96d56Sopenharmony_ci   Clear the internal type cache. The type cache is used to speed up attribute
1877db96d56Sopenharmony_ci   and method lookups. Use the function *only* to drop unnecessary references
1887db96d56Sopenharmony_ci   during reference leak debugging.
1897db96d56Sopenharmony_ci
1907db96d56Sopenharmony_ci   This function should be used for internal and specialized purposes only.
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci
1937db96d56Sopenharmony_ci.. function:: _current_frames()
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci   Return a dictionary mapping each thread's identifier to the topmost stack frame
1967db96d56Sopenharmony_ci   currently active in that thread at the time the function is called. Note that
1977db96d56Sopenharmony_ci   functions in the :mod:`traceback` module can build the call stack given such a
1987db96d56Sopenharmony_ci   frame.
1997db96d56Sopenharmony_ci
2007db96d56Sopenharmony_ci   This is most useful for debugging deadlock:  this function does not require the
2017db96d56Sopenharmony_ci   deadlocked threads' cooperation, and such threads' call stacks are frozen for as
2027db96d56Sopenharmony_ci   long as they remain deadlocked.  The frame returned for a non-deadlocked thread
2037db96d56Sopenharmony_ci   may bear no relationship to that thread's current activity by the time calling
2047db96d56Sopenharmony_ci   code examines the frame.
2057db96d56Sopenharmony_ci
2067db96d56Sopenharmony_ci   This function should be used for internal and specialized purposes only.
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ci   .. audit-event:: sys._current_frames "" sys._current_frames
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ci.. function:: _current_exceptions()
2117db96d56Sopenharmony_ci
2127db96d56Sopenharmony_ci   Return a dictionary mapping each thread's identifier to the topmost exception
2137db96d56Sopenharmony_ci   currently active in that thread at the time the function is called.
2147db96d56Sopenharmony_ci   If a thread is not currently handling an exception, it is not included in
2157db96d56Sopenharmony_ci   the result dictionary.
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ci   This is most useful for statistical profiling.
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci   This function should be used for internal and specialized purposes only.
2207db96d56Sopenharmony_ci
2217db96d56Sopenharmony_ci   .. audit-event:: sys._current_exceptions "" sys._current_exceptions
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ci.. function:: breakpointhook()
2247db96d56Sopenharmony_ci
2257db96d56Sopenharmony_ci   This hook function is called by built-in :func:`breakpoint`.  By default,
2267db96d56Sopenharmony_ci   it drops you into the :mod:`pdb` debugger, but it can be set to any other
2277db96d56Sopenharmony_ci   function so that you can choose which debugger gets used.
2287db96d56Sopenharmony_ci
2297db96d56Sopenharmony_ci   The signature of this function is dependent on what it calls.  For example,
2307db96d56Sopenharmony_ci   the default binding (e.g. ``pdb.set_trace()``) expects no arguments, but
2317db96d56Sopenharmony_ci   you might bind it to a function that expects additional arguments
2327db96d56Sopenharmony_ci   (positional and/or keyword).  The built-in ``breakpoint()`` function passes
2337db96d56Sopenharmony_ci   its ``*args`` and ``**kws`` straight through.  Whatever
2347db96d56Sopenharmony_ci   ``breakpointhooks()`` returns is returned from ``breakpoint()``.
2357db96d56Sopenharmony_ci
2367db96d56Sopenharmony_ci   The default implementation first consults the environment variable
2377db96d56Sopenharmony_ci   :envvar:`PYTHONBREAKPOINT`.  If that is set to ``"0"`` then this function
2387db96d56Sopenharmony_ci   returns immediately; i.e. it is a no-op.  If the environment variable is
2397db96d56Sopenharmony_ci   not set, or is set to the empty string, ``pdb.set_trace()`` is called.
2407db96d56Sopenharmony_ci   Otherwise this variable should name a function to run, using Python's
2417db96d56Sopenharmony_ci   dotted-import nomenclature, e.g. ``package.subpackage.module.function``.
2427db96d56Sopenharmony_ci   In this case, ``package.subpackage.module`` would be imported and the
2437db96d56Sopenharmony_ci   resulting module must have a callable named ``function()``.  This is run,
2447db96d56Sopenharmony_ci   passing in ``*args`` and ``**kws``, and whatever ``function()`` returns,
2457db96d56Sopenharmony_ci   ``sys.breakpointhook()`` returns to the built-in :func:`breakpoint`
2467db96d56Sopenharmony_ci   function.
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci   Note that if anything goes wrong while importing the callable named by
2497db96d56Sopenharmony_ci   :envvar:`PYTHONBREAKPOINT`, a :exc:`RuntimeWarning` is reported and the
2507db96d56Sopenharmony_ci   breakpoint is ignored.
2517db96d56Sopenharmony_ci
2527db96d56Sopenharmony_ci   Also note that if ``sys.breakpointhook()`` is overridden programmatically,
2537db96d56Sopenharmony_ci   :envvar:`PYTHONBREAKPOINT` is *not* consulted.
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ci   .. versionadded:: 3.7
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ci.. function:: _debugmallocstats()
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ci   Print low-level information to stderr about the state of CPython's memory
2607db96d56Sopenharmony_ci   allocator.
2617db96d56Sopenharmony_ci
2627db96d56Sopenharmony_ci   If Python is :ref:`built in debug mode <debug-build>` (:option:`configure
2637db96d56Sopenharmony_ci   --with-pydebug option <--with-pydebug>`), it also performs some expensive
2647db96d56Sopenharmony_ci   internal consistency checks.
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ci   .. versionadded:: 3.3
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci   .. impl-detail::
2697db96d56Sopenharmony_ci
2707db96d56Sopenharmony_ci      This function is specific to CPython.  The exact output format is not
2717db96d56Sopenharmony_ci      defined here, and may change.
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci
2747db96d56Sopenharmony_ci.. data:: dllhandle
2757db96d56Sopenharmony_ci
2767db96d56Sopenharmony_ci   Integer specifying the handle of the Python DLL.
2777db96d56Sopenharmony_ci
2787db96d56Sopenharmony_ci   .. availability:: Windows.
2797db96d56Sopenharmony_ci
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci.. function:: displayhook(value)
2827db96d56Sopenharmony_ci
2837db96d56Sopenharmony_ci   If *value* is not ``None``, this function prints ``repr(value)`` to
2847db96d56Sopenharmony_ci   ``sys.stdout``, and saves *value* in ``builtins._``. If ``repr(value)`` is
2857db96d56Sopenharmony_ci   not encodable to ``sys.stdout.encoding`` with ``sys.stdout.errors`` error
2867db96d56Sopenharmony_ci   handler (which is probably ``'strict'``), encode it to
2877db96d56Sopenharmony_ci   ``sys.stdout.encoding`` with ``'backslashreplace'`` error handler.
2887db96d56Sopenharmony_ci
2897db96d56Sopenharmony_ci   ``sys.displayhook`` is called on the result of evaluating an :term:`expression`
2907db96d56Sopenharmony_ci   entered in an interactive Python session.  The display of these values can be
2917db96d56Sopenharmony_ci   customized by assigning another one-argument function to ``sys.displayhook``.
2927db96d56Sopenharmony_ci
2937db96d56Sopenharmony_ci   Pseudo-code::
2947db96d56Sopenharmony_ci
2957db96d56Sopenharmony_ci       def displayhook(value):
2967db96d56Sopenharmony_ci           if value is None:
2977db96d56Sopenharmony_ci               return
2987db96d56Sopenharmony_ci           # Set '_' to None to avoid recursion
2997db96d56Sopenharmony_ci           builtins._ = None
3007db96d56Sopenharmony_ci           text = repr(value)
3017db96d56Sopenharmony_ci           try:
3027db96d56Sopenharmony_ci               sys.stdout.write(text)
3037db96d56Sopenharmony_ci           except UnicodeEncodeError:
3047db96d56Sopenharmony_ci               bytes = text.encode(sys.stdout.encoding, 'backslashreplace')
3057db96d56Sopenharmony_ci               if hasattr(sys.stdout, 'buffer'):
3067db96d56Sopenharmony_ci                   sys.stdout.buffer.write(bytes)
3077db96d56Sopenharmony_ci               else:
3087db96d56Sopenharmony_ci                   text = bytes.decode(sys.stdout.encoding, 'strict')
3097db96d56Sopenharmony_ci                   sys.stdout.write(text)
3107db96d56Sopenharmony_ci           sys.stdout.write("\n")
3117db96d56Sopenharmony_ci           builtins._ = value
3127db96d56Sopenharmony_ci
3137db96d56Sopenharmony_ci   .. versionchanged:: 3.2
3147db96d56Sopenharmony_ci      Use ``'backslashreplace'`` error handler on :exc:`UnicodeEncodeError`.
3157db96d56Sopenharmony_ci
3167db96d56Sopenharmony_ci
3177db96d56Sopenharmony_ci.. data:: dont_write_bytecode
3187db96d56Sopenharmony_ci
3197db96d56Sopenharmony_ci   If this is true, Python won't try to write ``.pyc`` files on the
3207db96d56Sopenharmony_ci   import of source modules.  This value is initially set to ``True`` or
3217db96d56Sopenharmony_ci   ``False`` depending on the :option:`-B` command line option and the
3227db96d56Sopenharmony_ci   :envvar:`PYTHONDONTWRITEBYTECODE` environment variable, but you can set it
3237db96d56Sopenharmony_ci   yourself to control bytecode file generation.
3247db96d56Sopenharmony_ci
3257db96d56Sopenharmony_ci
3267db96d56Sopenharmony_ci.. data:: _emscripten_info
3277db96d56Sopenharmony_ci
3287db96d56Sopenharmony_ci   A :term:`named tuple` holding information about the environment on the
3297db96d56Sopenharmony_ci   *wasm32-emscripten* platform. The named tuple is provisional and may change
3307db96d56Sopenharmony_ci   in the future.
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_ci   .. tabularcolumns:: |l|L|
3337db96d56Sopenharmony_ci
3347db96d56Sopenharmony_ci   +-----------------------------+----------------------------------------------+
3357db96d56Sopenharmony_ci   | Attribute                   | Explanation                                  |
3367db96d56Sopenharmony_ci   +=============================+==============================================+
3377db96d56Sopenharmony_ci   | :const:`emscripten_version` | Emscripten version as tuple of ints          |
3387db96d56Sopenharmony_ci   |                             | (major, minor, micro), e.g. ``(3, 1, 8)``.   |
3397db96d56Sopenharmony_ci   +-----------------------------+----------------------------------------------+
3407db96d56Sopenharmony_ci   | :const:`runtime`            | Runtime string, e.g. browser user agent,     |
3417db96d56Sopenharmony_ci   |                             | ``'Node.js v14.18.2'``, or ``'UNKNOWN'``.    |
3427db96d56Sopenharmony_ci   +-----------------------------+----------------------------------------------+
3437db96d56Sopenharmony_ci   | :const:`pthreads`           | ``True`` if Python is compiled with          |
3447db96d56Sopenharmony_ci   |                             | Emscripten pthreads support.                 |
3457db96d56Sopenharmony_ci   +-----------------------------+----------------------------------------------+
3467db96d56Sopenharmony_ci   | :const:`shared_memory`      | ``True`` if Python is compiled with shared   |
3477db96d56Sopenharmony_ci   |                             | memory support.                              |
3487db96d56Sopenharmony_ci   +-----------------------------+----------------------------------------------+
3497db96d56Sopenharmony_ci
3507db96d56Sopenharmony_ci   .. availability:: Emscripten.
3517db96d56Sopenharmony_ci
3527db96d56Sopenharmony_ci   .. versionadded:: 3.11
3537db96d56Sopenharmony_ci
3547db96d56Sopenharmony_ci
3557db96d56Sopenharmony_ci.. data:: pycache_prefix
3567db96d56Sopenharmony_ci
3577db96d56Sopenharmony_ci   If this is set (not ``None``), Python will write bytecode-cache ``.pyc``
3587db96d56Sopenharmony_ci   files to (and read them from) a parallel directory tree rooted at this
3597db96d56Sopenharmony_ci   directory, rather than from ``__pycache__`` directories in the source code
3607db96d56Sopenharmony_ci   tree. Any ``__pycache__`` directories in the source code tree will be ignored
3617db96d56Sopenharmony_ci   and new ``.pyc`` files written within the pycache prefix. Thus if you use
3627db96d56Sopenharmony_ci   :mod:`compileall` as a pre-build step, you must ensure you run it with the
3637db96d56Sopenharmony_ci   same pycache prefix (if any) that you will use at runtime.
3647db96d56Sopenharmony_ci
3657db96d56Sopenharmony_ci   A relative path is interpreted relative to the current working directory.
3667db96d56Sopenharmony_ci
3677db96d56Sopenharmony_ci   This value is initially set based on the value of the :option:`-X`
3687db96d56Sopenharmony_ci   ``pycache_prefix=PATH`` command-line option or the
3697db96d56Sopenharmony_ci   :envvar:`PYTHONPYCACHEPREFIX` environment variable (command-line takes
3707db96d56Sopenharmony_ci   precedence). If neither are set, it is ``None``.
3717db96d56Sopenharmony_ci
3727db96d56Sopenharmony_ci   .. versionadded:: 3.8
3737db96d56Sopenharmony_ci
3747db96d56Sopenharmony_ci
3757db96d56Sopenharmony_ci.. function:: excepthook(type, value, traceback)
3767db96d56Sopenharmony_ci
3777db96d56Sopenharmony_ci   This function prints out a given traceback and exception to ``sys.stderr``.
3787db96d56Sopenharmony_ci
3797db96d56Sopenharmony_ci   When an exception is raised and uncaught, the interpreter calls
3807db96d56Sopenharmony_ci   ``sys.excepthook`` with three arguments, the exception class, exception
3817db96d56Sopenharmony_ci   instance, and a traceback object.  In an interactive session this happens just
3827db96d56Sopenharmony_ci   before control is returned to the prompt; in a Python program this happens just
3837db96d56Sopenharmony_ci   before the program exits.  The handling of such top-level exceptions can be
3847db96d56Sopenharmony_ci   customized by assigning another three-argument function to ``sys.excepthook``.
3857db96d56Sopenharmony_ci
3867db96d56Sopenharmony_ci   .. audit-event:: sys.excepthook hook,type,value,traceback sys.excepthook
3877db96d56Sopenharmony_ci
3887db96d56Sopenharmony_ci      Raise an auditing event ``sys.excepthook`` with arguments ``hook``,
3897db96d56Sopenharmony_ci      ``type``, ``value``, ``traceback`` when an uncaught exception occurs.
3907db96d56Sopenharmony_ci      If no hook has been set, ``hook`` may be ``None``. If any hook raises
3917db96d56Sopenharmony_ci      an exception derived from :class:`RuntimeError` the call to the hook will
3927db96d56Sopenharmony_ci      be suppressed. Otherwise, the audit hook exception will be reported as
3937db96d56Sopenharmony_ci      unraisable and ``sys.excepthook`` will be called.
3947db96d56Sopenharmony_ci
3957db96d56Sopenharmony_ci   .. seealso::
3967db96d56Sopenharmony_ci
3977db96d56Sopenharmony_ci      The :func:`sys.unraisablehook` function handles unraisable exceptions
3987db96d56Sopenharmony_ci      and the :func:`threading.excepthook` function handles exception raised
3997db96d56Sopenharmony_ci      by :func:`threading.Thread.run`.
4007db96d56Sopenharmony_ci
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_ci.. data:: __breakpointhook__
4037db96d56Sopenharmony_ci          __displayhook__
4047db96d56Sopenharmony_ci          __excepthook__
4057db96d56Sopenharmony_ci          __unraisablehook__
4067db96d56Sopenharmony_ci
4077db96d56Sopenharmony_ci   These objects contain the original values of ``breakpointhook``,
4087db96d56Sopenharmony_ci   ``displayhook``, ``excepthook``, and ``unraisablehook`` at the start of the
4097db96d56Sopenharmony_ci   program.  They are saved so that ``breakpointhook``, ``displayhook`` and
4107db96d56Sopenharmony_ci   ``excepthook``, ``unraisablehook`` can be restored in case they happen to
4117db96d56Sopenharmony_ci   get replaced with broken or alternative objects.
4127db96d56Sopenharmony_ci
4137db96d56Sopenharmony_ci   .. versionadded:: 3.7
4147db96d56Sopenharmony_ci      __breakpointhook__
4157db96d56Sopenharmony_ci
4167db96d56Sopenharmony_ci   .. versionadded:: 3.8
4177db96d56Sopenharmony_ci      __unraisablehook__
4187db96d56Sopenharmony_ci
4197db96d56Sopenharmony_ci
4207db96d56Sopenharmony_ci.. function:: exception()
4217db96d56Sopenharmony_ci
4227db96d56Sopenharmony_ci   This function, when called while an exception handler is executing (such as
4237db96d56Sopenharmony_ci   an ``except`` or ``except*`` clause), returns the exception instance that
4247db96d56Sopenharmony_ci   was caught by this handler. When exception handlers are nested within one
4257db96d56Sopenharmony_ci   another, only the exception handled by the innermost handler is accessible.
4267db96d56Sopenharmony_ci
4277db96d56Sopenharmony_ci   If no exception handler is executing, this function returns ``None``.
4287db96d56Sopenharmony_ci
4297db96d56Sopenharmony_ci   .. versionadded:: 3.11
4307db96d56Sopenharmony_ci
4317db96d56Sopenharmony_ci
4327db96d56Sopenharmony_ci.. function:: exc_info()
4337db96d56Sopenharmony_ci
4347db96d56Sopenharmony_ci   This function returns the old-style representation of the handled
4357db96d56Sopenharmony_ci   exception. If an exception ``e`` is currently handled (so
4367db96d56Sopenharmony_ci   :func:`exception` would return ``e``), :func:`exc_info` returns the
4377db96d56Sopenharmony_ci   tuple ``(type(e), e, e.__traceback__)``.
4387db96d56Sopenharmony_ci   That is, a tuple containing the type of the exception (a subclass of
4397db96d56Sopenharmony_ci   :exc:`BaseException`), the exception itself, and a :ref:`traceback
4407db96d56Sopenharmony_ci   object <traceback-objects>` which typically encapsulates the call
4417db96d56Sopenharmony_ci   stack at the point where the exception last occurred.
4427db96d56Sopenharmony_ci
4437db96d56Sopenharmony_ci   .. index:: pair: object; traceback
4447db96d56Sopenharmony_ci
4457db96d56Sopenharmony_ci   If no exception is being handled anywhere on the stack, this function
4467db96d56Sopenharmony_ci   return a tuple containing three ``None`` values.
4477db96d56Sopenharmony_ci
4487db96d56Sopenharmony_ci   .. versionchanged:: 3.11
4497db96d56Sopenharmony_ci      The ``type`` and ``traceback`` fields are now derived from the ``value``
4507db96d56Sopenharmony_ci      (the exception instance), so when an exception is modified while it is
4517db96d56Sopenharmony_ci      being handled, the changes are reflected in the results of subsequent
4527db96d56Sopenharmony_ci      calls to :func:`exc_info`.
4537db96d56Sopenharmony_ci
4547db96d56Sopenharmony_ci.. data:: exec_prefix
4557db96d56Sopenharmony_ci
4567db96d56Sopenharmony_ci   A string giving the site-specific directory prefix where the platform-dependent
4577db96d56Sopenharmony_ci   Python files are installed; by default, this is also ``'/usr/local'``.  This can
4587db96d56Sopenharmony_ci   be set at build time with the ``--exec-prefix`` argument to the
4597db96d56Sopenharmony_ci   :program:`configure` script.  Specifically, all configuration files (e.g. the
4607db96d56Sopenharmony_ci   :file:`pyconfig.h` header file) are installed in the directory
4617db96d56Sopenharmony_ci   :file:`{exec_prefix}/lib/python{X.Y}/config`, and shared library modules are
4627db96d56Sopenharmony_ci   installed in :file:`{exec_prefix}/lib/python{X.Y}/lib-dynload`, where *X.Y*
4637db96d56Sopenharmony_ci   is the version number of Python, for example ``3.2``.
4647db96d56Sopenharmony_ci
4657db96d56Sopenharmony_ci   .. note::
4667db96d56Sopenharmony_ci
4677db96d56Sopenharmony_ci      If a :ref:`virtual environment <venv-def>` is in effect, this
4687db96d56Sopenharmony_ci      value will be changed in ``site.py`` to point to the virtual environment.
4697db96d56Sopenharmony_ci      The value for the Python installation will still be available, via
4707db96d56Sopenharmony_ci      :data:`base_exec_prefix`.
4717db96d56Sopenharmony_ci
4727db96d56Sopenharmony_ci
4737db96d56Sopenharmony_ci.. data:: executable
4747db96d56Sopenharmony_ci
4757db96d56Sopenharmony_ci   A string giving the absolute path of the executable binary for the Python
4767db96d56Sopenharmony_ci   interpreter, on systems where this makes sense. If Python is unable to retrieve
4777db96d56Sopenharmony_ci   the real path to its executable, :data:`sys.executable` will be an empty string
4787db96d56Sopenharmony_ci   or ``None``.
4797db96d56Sopenharmony_ci
4807db96d56Sopenharmony_ci
4817db96d56Sopenharmony_ci.. function:: exit([arg])
4827db96d56Sopenharmony_ci
4837db96d56Sopenharmony_ci   Raise a :exc:`SystemExit` exception, signaling an intention to exit the interpreter.
4847db96d56Sopenharmony_ci
4857db96d56Sopenharmony_ci   The optional argument *arg* can be an integer giving the exit status
4867db96d56Sopenharmony_ci   (defaulting to zero), or another type of object.  If it is an integer, zero
4877db96d56Sopenharmony_ci   is considered "successful termination" and any nonzero value is considered
4887db96d56Sopenharmony_ci   "abnormal termination" by shells and the like.  Most systems require it to be
4897db96d56Sopenharmony_ci   in the range 0--127, and produce undefined results otherwise.  Some systems
4907db96d56Sopenharmony_ci   have a convention for assigning specific meanings to specific exit codes, but
4917db96d56Sopenharmony_ci   these are generally underdeveloped; Unix programs generally use 2 for command
4927db96d56Sopenharmony_ci   line syntax errors and 1 for all other kind of errors.  If another type of
4937db96d56Sopenharmony_ci   object is passed, ``None`` is equivalent to passing zero, and any other
4947db96d56Sopenharmony_ci   object is printed to :data:`stderr` and results in an exit code of 1.  In
4957db96d56Sopenharmony_ci   particular, ``sys.exit("some error message")`` is a quick way to exit a
4967db96d56Sopenharmony_ci   program when an error occurs.
4977db96d56Sopenharmony_ci
4987db96d56Sopenharmony_ci   Since :func:`exit` ultimately "only" raises an exception, it will only exit
4997db96d56Sopenharmony_ci   the process when called from the main thread, and the exception is not
5007db96d56Sopenharmony_ci   intercepted. Cleanup actions specified by finally clauses of :keyword:`try` statements
5017db96d56Sopenharmony_ci   are honored, and it is possible to intercept the exit attempt at an outer level.
5027db96d56Sopenharmony_ci
5037db96d56Sopenharmony_ci   .. versionchanged:: 3.6
5047db96d56Sopenharmony_ci      If an error occurs in the cleanup after the Python interpreter
5057db96d56Sopenharmony_ci      has caught :exc:`SystemExit` (such as an error flushing buffered data
5067db96d56Sopenharmony_ci      in the standard streams), the exit status is changed to 120.
5077db96d56Sopenharmony_ci
5087db96d56Sopenharmony_ci
5097db96d56Sopenharmony_ci.. data:: flags
5107db96d56Sopenharmony_ci
5117db96d56Sopenharmony_ci   The :term:`named tuple` *flags* exposes the status of command line
5127db96d56Sopenharmony_ci   flags. The attributes are read only.
5137db96d56Sopenharmony_ci
5147db96d56Sopenharmony_ci   ============================= ==============================================================================================================
5157db96d56Sopenharmony_ci   attribute                     flag
5167db96d56Sopenharmony_ci   ============================= ==============================================================================================================
5177db96d56Sopenharmony_ci   :const:`debug`                :option:`-d`
5187db96d56Sopenharmony_ci   :const:`inspect`              :option:`-i`
5197db96d56Sopenharmony_ci   :const:`interactive`          :option:`-i`
5207db96d56Sopenharmony_ci   :const:`isolated`             :option:`-I`
5217db96d56Sopenharmony_ci   :const:`optimize`             :option:`-O` or :option:`-OO`
5227db96d56Sopenharmony_ci   :const:`dont_write_bytecode`  :option:`-B`
5237db96d56Sopenharmony_ci   :const:`no_user_site`         :option:`-s`
5247db96d56Sopenharmony_ci   :const:`no_site`              :option:`-S`
5257db96d56Sopenharmony_ci   :const:`ignore_environment`   :option:`-E`
5267db96d56Sopenharmony_ci   :const:`verbose`              :option:`-v`
5277db96d56Sopenharmony_ci   :const:`bytes_warning`        :option:`-b`
5287db96d56Sopenharmony_ci   :const:`quiet`                :option:`-q`
5297db96d56Sopenharmony_ci   :const:`hash_randomization`   :option:`-R`
5307db96d56Sopenharmony_ci   :const:`dev_mode`             :option:`-X dev <-X>` (:ref:`Python Development Mode <devmode>`)
5317db96d56Sopenharmony_ci   :const:`utf8_mode`            :option:`-X utf8 <-X>`
5327db96d56Sopenharmony_ci   :const:`safe_path`            :option:`-P`
5337db96d56Sopenharmony_ci   :const:`int_max_str_digits`   :option:`-X int_max_str_digits <-X>` (:ref:`integer string conversion length limitation <int_max_str_digits>`)
5347db96d56Sopenharmony_ci   ============================= ==============================================================================================================
5357db96d56Sopenharmony_ci
5367db96d56Sopenharmony_ci   .. versionchanged:: 3.2
5377db96d56Sopenharmony_ci      Added ``quiet`` attribute for the new :option:`-q` flag.
5387db96d56Sopenharmony_ci
5397db96d56Sopenharmony_ci   .. versionadded:: 3.2.3
5407db96d56Sopenharmony_ci      The ``hash_randomization`` attribute.
5417db96d56Sopenharmony_ci
5427db96d56Sopenharmony_ci   .. versionchanged:: 3.3
5437db96d56Sopenharmony_ci      Removed obsolete ``division_warning`` attribute.
5447db96d56Sopenharmony_ci
5457db96d56Sopenharmony_ci   .. versionchanged:: 3.4
5467db96d56Sopenharmony_ci      Added ``isolated`` attribute for :option:`-I` ``isolated`` flag.
5477db96d56Sopenharmony_ci
5487db96d56Sopenharmony_ci   .. versionchanged:: 3.7
5497db96d56Sopenharmony_ci      Added the ``dev_mode`` attribute for the new :ref:`Python Development
5507db96d56Sopenharmony_ci      Mode <devmode>` and the ``utf8_mode`` attribute for the new  :option:`-X`
5517db96d56Sopenharmony_ci      ``utf8`` flag.
5527db96d56Sopenharmony_ci
5537db96d56Sopenharmony_ci   .. versionchanged:: 3.11
5547db96d56Sopenharmony_ci      Added the ``safe_path`` attribute for :option:`-P` option.
5557db96d56Sopenharmony_ci
5567db96d56Sopenharmony_ci   .. versionchanged:: 3.11
5577db96d56Sopenharmony_ci      Added the ``int_max_str_digits`` attribute.
5587db96d56Sopenharmony_ci
5597db96d56Sopenharmony_ci
5607db96d56Sopenharmony_ci.. data:: float_info
5617db96d56Sopenharmony_ci
5627db96d56Sopenharmony_ci   A :term:`named tuple` holding information about the float type. It
5637db96d56Sopenharmony_ci   contains low level information about the precision and internal
5647db96d56Sopenharmony_ci   representation.  The values correspond to the various floating-point
5657db96d56Sopenharmony_ci   constants defined in the standard header file :file:`float.h` for the 'C'
5667db96d56Sopenharmony_ci   programming language; see section 5.2.4.2.2 of the 1999 ISO/IEC C standard
5677db96d56Sopenharmony_ci   [C99]_, 'Characteristics of floating types', for details.
5687db96d56Sopenharmony_ci
5697db96d56Sopenharmony_ci   .. tabularcolumns:: |l|l|L|
5707db96d56Sopenharmony_ci
5717db96d56Sopenharmony_ci   +---------------------+---------------------+--------------------------------------------------+
5727db96d56Sopenharmony_ci   | attribute           | float.h macro       | explanation                                      |
5737db96d56Sopenharmony_ci   +=====================+=====================+==================================================+
5747db96d56Sopenharmony_ci   | ``epsilon``         | ``DBL_EPSILON``     | difference between 1.0 and the least value       |
5757db96d56Sopenharmony_ci   |                     |                     | greater than 1.0 that is representable as a float|
5767db96d56Sopenharmony_ci   |                     |                     |                                                  |
5777db96d56Sopenharmony_ci   |                     |                     | See also :func:`math.ulp`.                       |
5787db96d56Sopenharmony_ci   +---------------------+---------------------+--------------------------------------------------+
5797db96d56Sopenharmony_ci   | ``dig``             | ``DBL_DIG``         | maximum number of decimal digits that can be     |
5807db96d56Sopenharmony_ci   |                     |                     | faithfully represented in a float;  see below    |
5817db96d56Sopenharmony_ci   +---------------------+---------------------+--------------------------------------------------+
5827db96d56Sopenharmony_ci   | ``mant_dig``        | ``DBL_MANT_DIG``    | float precision: the number of base-``radix``    |
5837db96d56Sopenharmony_ci   |                     |                     | digits in the significand of a float             |
5847db96d56Sopenharmony_ci   +---------------------+---------------------+--------------------------------------------------+
5857db96d56Sopenharmony_ci   | ``max``             | ``DBL_MAX``         | maximum representable positive finite float      |
5867db96d56Sopenharmony_ci   +---------------------+---------------------+--------------------------------------------------+
5877db96d56Sopenharmony_ci   | ``max_exp``         | ``DBL_MAX_EXP``     | maximum integer *e* such that ``radix**(e-1)`` is|
5887db96d56Sopenharmony_ci   |                     |                     | a representable finite float                     |
5897db96d56Sopenharmony_ci   +---------------------+---------------------+--------------------------------------------------+
5907db96d56Sopenharmony_ci   | ``max_10_exp``      | ``DBL_MAX_10_EXP``  | maximum integer *e* such that ``10**e`` is in the|
5917db96d56Sopenharmony_ci   |                     |                     | range of representable finite floats             |
5927db96d56Sopenharmony_ci   +---------------------+---------------------+--------------------------------------------------+
5937db96d56Sopenharmony_ci   | ``min``             | ``DBL_MIN``         | minimum representable positive *normalized* float|
5947db96d56Sopenharmony_ci   |                     |                     |                                                  |
5957db96d56Sopenharmony_ci   |                     |                     | Use :func:`math.ulp(0.0) <math.ulp>` to get the  |
5967db96d56Sopenharmony_ci   |                     |                     | smallest positive *denormalized* representable   |
5977db96d56Sopenharmony_ci   |                     |                     | float.                                           |
5987db96d56Sopenharmony_ci   +---------------------+---------------------+--------------------------------------------------+
5997db96d56Sopenharmony_ci   | ``min_exp``         | ``DBL_MIN_EXP``     | minimum integer *e* such that ``radix**(e-1)`` is|
6007db96d56Sopenharmony_ci   |                     |                     | a normalized float                               |
6017db96d56Sopenharmony_ci   +---------------------+---------------------+--------------------------------------------------+
6027db96d56Sopenharmony_ci   | ``min_10_exp``      | ``DBL_MIN_10_EXP``  | minimum integer *e* such that ``10**e`` is a     |
6037db96d56Sopenharmony_ci   |                     |                     | normalized float                                 |
6047db96d56Sopenharmony_ci   +---------------------+---------------------+--------------------------------------------------+
6057db96d56Sopenharmony_ci   | ``radix``           | ``FLT_RADIX``       | radix of exponent representation                 |
6067db96d56Sopenharmony_ci   +---------------------+---------------------+--------------------------------------------------+
6077db96d56Sopenharmony_ci   | ``rounds``          | ``FLT_ROUNDS``      | integer representing the rounding mode for       |
6087db96d56Sopenharmony_ci   |                     |                     | floating-point arithmetic. This reflects the     |
6097db96d56Sopenharmony_ci   |                     |                     | value of the system ``FLT_ROUNDS`` macro at      |
6107db96d56Sopenharmony_ci   |                     |                     | interpreter startup time:                        |
6117db96d56Sopenharmony_ci   |                     |                     | ``-1`` indeterminable,                           |
6127db96d56Sopenharmony_ci   |                     |                     | ``0`` toward zero,                               |
6137db96d56Sopenharmony_ci   |                     |                     | ``1`` to nearest,                                |
6147db96d56Sopenharmony_ci   |                     |                     | ``2`` toward positive infinity,                  |
6157db96d56Sopenharmony_ci   |                     |                     | ``3`` toward negative infinity                   |
6167db96d56Sopenharmony_ci   |                     |                     |                                                  |
6177db96d56Sopenharmony_ci   |                     |                     | All other values for ``FLT_ROUNDS`` characterize |
6187db96d56Sopenharmony_ci   |                     |                     | implementation-defined rounding behavior.        |
6197db96d56Sopenharmony_ci   +---------------------+---------------------+--------------------------------------------------+
6207db96d56Sopenharmony_ci
6217db96d56Sopenharmony_ci   The attribute :attr:`sys.float_info.dig` needs further explanation.  If
6227db96d56Sopenharmony_ci   ``s`` is any string representing a decimal number with at most
6237db96d56Sopenharmony_ci   :attr:`sys.float_info.dig` significant digits, then converting ``s`` to a
6247db96d56Sopenharmony_ci   float and back again will recover a string representing the same decimal
6257db96d56Sopenharmony_ci   value::
6267db96d56Sopenharmony_ci
6277db96d56Sopenharmony_ci      >>> import sys
6287db96d56Sopenharmony_ci      >>> sys.float_info.dig
6297db96d56Sopenharmony_ci      15
6307db96d56Sopenharmony_ci      >>> s = '3.14159265358979'    # decimal string with 15 significant digits
6317db96d56Sopenharmony_ci      >>> format(float(s), '.15g')  # convert to float and back -> same value
6327db96d56Sopenharmony_ci      '3.14159265358979'
6337db96d56Sopenharmony_ci
6347db96d56Sopenharmony_ci   But for strings with more than :attr:`sys.float_info.dig` significant digits,
6357db96d56Sopenharmony_ci   this isn't always true::
6367db96d56Sopenharmony_ci
6377db96d56Sopenharmony_ci      >>> s = '9876543211234567'    # 16 significant digits is too many!
6387db96d56Sopenharmony_ci      >>> format(float(s), '.16g')  # conversion changes value
6397db96d56Sopenharmony_ci      '9876543211234568'
6407db96d56Sopenharmony_ci
6417db96d56Sopenharmony_ci.. data:: float_repr_style
6427db96d56Sopenharmony_ci
6437db96d56Sopenharmony_ci   A string indicating how the :func:`repr` function behaves for
6447db96d56Sopenharmony_ci   floats.  If the string has value ``'short'`` then for a finite
6457db96d56Sopenharmony_ci   float ``x``, ``repr(x)`` aims to produce a short string with the
6467db96d56Sopenharmony_ci   property that ``float(repr(x)) == x``.  This is the usual behaviour
6477db96d56Sopenharmony_ci   in Python 3.1 and later.  Otherwise, ``float_repr_style`` has value
6487db96d56Sopenharmony_ci   ``'legacy'`` and ``repr(x)`` behaves in the same way as it did in
6497db96d56Sopenharmony_ci   versions of Python prior to 3.1.
6507db96d56Sopenharmony_ci
6517db96d56Sopenharmony_ci   .. versionadded:: 3.1
6527db96d56Sopenharmony_ci
6537db96d56Sopenharmony_ci
6547db96d56Sopenharmony_ci.. function:: getallocatedblocks()
6557db96d56Sopenharmony_ci
6567db96d56Sopenharmony_ci   Return the number of memory blocks currently allocated by the interpreter,
6577db96d56Sopenharmony_ci   regardless of their size.  This function is mainly useful for tracking
6587db96d56Sopenharmony_ci   and debugging memory leaks.  Because of the interpreter's internal
6597db96d56Sopenharmony_ci   caches, the result can vary from call to call; you may have to call
6607db96d56Sopenharmony_ci   :func:`_clear_type_cache()` and :func:`gc.collect()` to get more
6617db96d56Sopenharmony_ci   predictable results.
6627db96d56Sopenharmony_ci
6637db96d56Sopenharmony_ci   If a Python build or implementation cannot reasonably compute this
6647db96d56Sopenharmony_ci   information, :func:`getallocatedblocks()` is allowed to return 0 instead.
6657db96d56Sopenharmony_ci
6667db96d56Sopenharmony_ci   .. versionadded:: 3.4
6677db96d56Sopenharmony_ci
6687db96d56Sopenharmony_ci
6697db96d56Sopenharmony_ci.. function:: getandroidapilevel()
6707db96d56Sopenharmony_ci
6717db96d56Sopenharmony_ci   Return the build time API version of Android as an integer.
6727db96d56Sopenharmony_ci
6737db96d56Sopenharmony_ci   .. availability:: Android.
6747db96d56Sopenharmony_ci
6757db96d56Sopenharmony_ci   .. versionadded:: 3.7
6767db96d56Sopenharmony_ci
6777db96d56Sopenharmony_ci
6787db96d56Sopenharmony_ci.. function:: getdefaultencoding()
6797db96d56Sopenharmony_ci
6807db96d56Sopenharmony_ci   Return the name of the current default string encoding used by the Unicode
6817db96d56Sopenharmony_ci   implementation.
6827db96d56Sopenharmony_ci
6837db96d56Sopenharmony_ci
6847db96d56Sopenharmony_ci.. function:: getdlopenflags()
6857db96d56Sopenharmony_ci
6867db96d56Sopenharmony_ci   Return the current value of the flags that are used for
6877db96d56Sopenharmony_ci   :c:func:`dlopen` calls.  Symbolic names for the flag values can be
6887db96d56Sopenharmony_ci   found in the :mod:`os` module (``RTLD_xxx`` constants, e.g.
6897db96d56Sopenharmony_ci   :data:`os.RTLD_LAZY`).
6907db96d56Sopenharmony_ci
6917db96d56Sopenharmony_ci   .. availability:: Unix.
6927db96d56Sopenharmony_ci
6937db96d56Sopenharmony_ci
6947db96d56Sopenharmony_ci.. function:: getfilesystemencoding()
6957db96d56Sopenharmony_ci
6967db96d56Sopenharmony_ci   Get the :term:`filesystem encoding <filesystem encoding and error handler>`:
6977db96d56Sopenharmony_ci   the encoding used with the :term:`filesystem error handler <filesystem
6987db96d56Sopenharmony_ci   encoding and error handler>` to convert between Unicode filenames and bytes
6997db96d56Sopenharmony_ci   filenames. The filesystem error handler is returned from
7007db96d56Sopenharmony_ci   :func:`getfilesystemencodeerrors`.
7017db96d56Sopenharmony_ci
7027db96d56Sopenharmony_ci   For best compatibility, str should be used for filenames in all cases,
7037db96d56Sopenharmony_ci   although representing filenames as bytes is also supported. Functions
7047db96d56Sopenharmony_ci   accepting or returning filenames should support either str or bytes and
7057db96d56Sopenharmony_ci   internally convert to the system's preferred representation.
7067db96d56Sopenharmony_ci
7077db96d56Sopenharmony_ci   :func:`os.fsencode` and :func:`os.fsdecode` should be used to ensure that
7087db96d56Sopenharmony_ci   the correct encoding and errors mode are used.
7097db96d56Sopenharmony_ci
7107db96d56Sopenharmony_ci   The :term:`filesystem encoding and error handler` are configured at Python
7117db96d56Sopenharmony_ci   startup by the :c:func:`PyConfig_Read` function: see
7127db96d56Sopenharmony_ci   :c:member:`~PyConfig.filesystem_encoding` and
7137db96d56Sopenharmony_ci   :c:member:`~PyConfig.filesystem_errors` members of :c:type:`PyConfig`.
7147db96d56Sopenharmony_ci
7157db96d56Sopenharmony_ci   .. versionchanged:: 3.2
7167db96d56Sopenharmony_ci      :func:`getfilesystemencoding` result cannot be ``None`` anymore.
7177db96d56Sopenharmony_ci
7187db96d56Sopenharmony_ci   .. versionchanged:: 3.6
7197db96d56Sopenharmony_ci      Windows is no longer guaranteed to return ``'mbcs'``. See :pep:`529`
7207db96d56Sopenharmony_ci      and :func:`_enablelegacywindowsfsencoding` for more information.
7217db96d56Sopenharmony_ci
7227db96d56Sopenharmony_ci   .. versionchanged:: 3.7
7237db96d56Sopenharmony_ci      Return ``'utf-8'`` if the :ref:`Python UTF-8 Mode <utf8-mode>` is
7247db96d56Sopenharmony_ci      enabled.
7257db96d56Sopenharmony_ci
7267db96d56Sopenharmony_ci
7277db96d56Sopenharmony_ci.. function:: getfilesystemencodeerrors()
7287db96d56Sopenharmony_ci
7297db96d56Sopenharmony_ci   Get the :term:`filesystem error handler <filesystem encoding and error
7307db96d56Sopenharmony_ci   handler>`: the error handler used with the :term:`filesystem encoding
7317db96d56Sopenharmony_ci   <filesystem encoding and error handler>` to convert between Unicode
7327db96d56Sopenharmony_ci   filenames and bytes filenames. The filesystem encoding is returned from
7337db96d56Sopenharmony_ci   :func:`getfilesystemencoding`.
7347db96d56Sopenharmony_ci
7357db96d56Sopenharmony_ci   :func:`os.fsencode` and :func:`os.fsdecode` should be used to ensure that
7367db96d56Sopenharmony_ci   the correct encoding and errors mode are used.
7377db96d56Sopenharmony_ci
7387db96d56Sopenharmony_ci   The :term:`filesystem encoding and error handler` are configured at Python
7397db96d56Sopenharmony_ci   startup by the :c:func:`PyConfig_Read` function: see
7407db96d56Sopenharmony_ci   :c:member:`~PyConfig.filesystem_encoding` and
7417db96d56Sopenharmony_ci   :c:member:`~PyConfig.filesystem_errors` members of :c:type:`PyConfig`.
7427db96d56Sopenharmony_ci
7437db96d56Sopenharmony_ci   .. versionadded:: 3.6
7447db96d56Sopenharmony_ci
7457db96d56Sopenharmony_ci.. function:: get_int_max_str_digits()
7467db96d56Sopenharmony_ci
7477db96d56Sopenharmony_ci   Returns the current value for the :ref:`integer string conversion length
7487db96d56Sopenharmony_ci   limitation <int_max_str_digits>`. See also :func:`set_int_max_str_digits`.
7497db96d56Sopenharmony_ci
7507db96d56Sopenharmony_ci   .. versionadded:: 3.11
7517db96d56Sopenharmony_ci
7527db96d56Sopenharmony_ci.. function:: getrefcount(object)
7537db96d56Sopenharmony_ci
7547db96d56Sopenharmony_ci   Return the reference count of the *object*.  The count returned is generally one
7557db96d56Sopenharmony_ci   higher than you might expect, because it includes the (temporary) reference as
7567db96d56Sopenharmony_ci   an argument to :func:`getrefcount`.
7577db96d56Sopenharmony_ci
7587db96d56Sopenharmony_ci
7597db96d56Sopenharmony_ci.. function:: getrecursionlimit()
7607db96d56Sopenharmony_ci
7617db96d56Sopenharmony_ci   Return the current value of the recursion limit, the maximum depth of the Python
7627db96d56Sopenharmony_ci   interpreter stack.  This limit prevents infinite recursion from causing an
7637db96d56Sopenharmony_ci   overflow of the C stack and crashing Python.  It can be set by
7647db96d56Sopenharmony_ci   :func:`setrecursionlimit`.
7657db96d56Sopenharmony_ci
7667db96d56Sopenharmony_ci
7677db96d56Sopenharmony_ci.. function:: getsizeof(object[, default])
7687db96d56Sopenharmony_ci
7697db96d56Sopenharmony_ci   Return the size of an object in bytes. The object can be any type of
7707db96d56Sopenharmony_ci   object. All built-in objects will return correct results, but this
7717db96d56Sopenharmony_ci   does not have to hold true for third-party extensions as it is implementation
7727db96d56Sopenharmony_ci   specific.
7737db96d56Sopenharmony_ci
7747db96d56Sopenharmony_ci   Only the memory consumption directly attributed to the object is
7757db96d56Sopenharmony_ci   accounted for, not the memory consumption of objects it refers to.
7767db96d56Sopenharmony_ci
7777db96d56Sopenharmony_ci   If given, *default* will be returned if the object does not provide means to
7787db96d56Sopenharmony_ci   retrieve the size.  Otherwise a :exc:`TypeError` will be raised.
7797db96d56Sopenharmony_ci
7807db96d56Sopenharmony_ci   :func:`getsizeof` calls the object's ``__sizeof__`` method and adds an
7817db96d56Sopenharmony_ci   additional garbage collector overhead if the object is managed by the garbage
7827db96d56Sopenharmony_ci   collector.
7837db96d56Sopenharmony_ci
7847db96d56Sopenharmony_ci   See `recursive sizeof recipe <https://code.activestate.com/recipes/577504/>`_
7857db96d56Sopenharmony_ci   for an example of using :func:`getsizeof` recursively to find the size of
7867db96d56Sopenharmony_ci   containers and all their contents.
7877db96d56Sopenharmony_ci
7887db96d56Sopenharmony_ci.. function:: getswitchinterval()
7897db96d56Sopenharmony_ci
7907db96d56Sopenharmony_ci   Return the interpreter's "thread switch interval"; see
7917db96d56Sopenharmony_ci   :func:`setswitchinterval`.
7927db96d56Sopenharmony_ci
7937db96d56Sopenharmony_ci   .. versionadded:: 3.2
7947db96d56Sopenharmony_ci
7957db96d56Sopenharmony_ci
7967db96d56Sopenharmony_ci.. function:: _getframe([depth])
7977db96d56Sopenharmony_ci
7987db96d56Sopenharmony_ci   Return a frame object from the call stack.  If optional integer *depth* is
7997db96d56Sopenharmony_ci   given, return the frame object that many calls below the top of the stack.  If
8007db96d56Sopenharmony_ci   that is deeper than the call stack, :exc:`ValueError` is raised.  The default
8017db96d56Sopenharmony_ci   for *depth* is zero, returning the frame at the top of the call stack.
8027db96d56Sopenharmony_ci
8037db96d56Sopenharmony_ci   .. audit-event:: sys._getframe frame sys._getframe
8047db96d56Sopenharmony_ci
8057db96d56Sopenharmony_ci   .. impl-detail::
8067db96d56Sopenharmony_ci
8077db96d56Sopenharmony_ci      This function should be used for internal and specialized purposes only.
8087db96d56Sopenharmony_ci      It is not guaranteed to exist in all implementations of Python.
8097db96d56Sopenharmony_ci
8107db96d56Sopenharmony_ci
8117db96d56Sopenharmony_ci.. function:: getprofile()
8127db96d56Sopenharmony_ci
8137db96d56Sopenharmony_ci   .. index::
8147db96d56Sopenharmony_ci      single: profile function
8157db96d56Sopenharmony_ci      single: profiler
8167db96d56Sopenharmony_ci
8177db96d56Sopenharmony_ci   Get the profiler function as set by :func:`setprofile`.
8187db96d56Sopenharmony_ci
8197db96d56Sopenharmony_ci
8207db96d56Sopenharmony_ci.. function:: gettrace()
8217db96d56Sopenharmony_ci
8227db96d56Sopenharmony_ci   .. index::
8237db96d56Sopenharmony_ci      single: trace function
8247db96d56Sopenharmony_ci      single: debugger
8257db96d56Sopenharmony_ci
8267db96d56Sopenharmony_ci   Get the trace function as set by :func:`settrace`.
8277db96d56Sopenharmony_ci
8287db96d56Sopenharmony_ci   .. impl-detail::
8297db96d56Sopenharmony_ci
8307db96d56Sopenharmony_ci      The :func:`gettrace` function is intended only for implementing debuggers,
8317db96d56Sopenharmony_ci      profilers, coverage tools and the like.  Its behavior is part of the
8327db96d56Sopenharmony_ci      implementation platform, rather than part of the language definition, and
8337db96d56Sopenharmony_ci      thus may not be available in all Python implementations.
8347db96d56Sopenharmony_ci
8357db96d56Sopenharmony_ci
8367db96d56Sopenharmony_ci.. function:: getwindowsversion()
8377db96d56Sopenharmony_ci
8387db96d56Sopenharmony_ci   Return a named tuple describing the Windows version
8397db96d56Sopenharmony_ci   currently running.  The named elements are *major*, *minor*,
8407db96d56Sopenharmony_ci   *build*, *platform*, *service_pack*, *service_pack_minor*,
8417db96d56Sopenharmony_ci   *service_pack_major*, *suite_mask*, *product_type* and
8427db96d56Sopenharmony_ci   *platform_version*. *service_pack* contains a string,
8437db96d56Sopenharmony_ci   *platform_version* a 3-tuple and all other values are
8447db96d56Sopenharmony_ci   integers. The components can also be accessed by name, so
8457db96d56Sopenharmony_ci   ``sys.getwindowsversion()[0]`` is equivalent to
8467db96d56Sopenharmony_ci   ``sys.getwindowsversion().major``. For compatibility with prior
8477db96d56Sopenharmony_ci   versions, only the first 5 elements are retrievable by indexing.
8487db96d56Sopenharmony_ci
8497db96d56Sopenharmony_ci   *platform* will be :const:`2 (VER_PLATFORM_WIN32_NT)`.
8507db96d56Sopenharmony_ci
8517db96d56Sopenharmony_ci   *product_type* may be one of the following values:
8527db96d56Sopenharmony_ci
8537db96d56Sopenharmony_ci   +---------------------------------------+---------------------------------+
8547db96d56Sopenharmony_ci   | Constant                              | Meaning                         |
8557db96d56Sopenharmony_ci   +=======================================+=================================+
8567db96d56Sopenharmony_ci   | :const:`1 (VER_NT_WORKSTATION)`       | The system is a workstation.    |
8577db96d56Sopenharmony_ci   +---------------------------------------+---------------------------------+
8587db96d56Sopenharmony_ci   | :const:`2 (VER_NT_DOMAIN_CONTROLLER)` | The system is a domain          |
8597db96d56Sopenharmony_ci   |                                       | controller.                     |
8607db96d56Sopenharmony_ci   +---------------------------------------+---------------------------------+
8617db96d56Sopenharmony_ci   | :const:`3 (VER_NT_SERVER)`            | The system is a server, but not |
8627db96d56Sopenharmony_ci   |                                       | a domain controller.            |
8637db96d56Sopenharmony_ci   +---------------------------------------+---------------------------------+
8647db96d56Sopenharmony_ci
8657db96d56Sopenharmony_ci   This function wraps the Win32 :c:func:`GetVersionEx` function; see the
8667db96d56Sopenharmony_ci   Microsoft documentation on :c:func:`OSVERSIONINFOEX` for more information
8677db96d56Sopenharmony_ci   about these fields.
8687db96d56Sopenharmony_ci
8697db96d56Sopenharmony_ci   *platform_version* returns the major version, minor version and
8707db96d56Sopenharmony_ci   build number of the current operating system, rather than the version that
8717db96d56Sopenharmony_ci   is being emulated for the process. It is intended for use in logging rather
8727db96d56Sopenharmony_ci   than for feature detection.
8737db96d56Sopenharmony_ci
8747db96d56Sopenharmony_ci   .. note::
8757db96d56Sopenharmony_ci      *platform_version* derives the version from kernel32.dll which can be of a different
8767db96d56Sopenharmony_ci      version than the OS version. Please use :mod:`platform` module for achieving accurate
8777db96d56Sopenharmony_ci      OS version.
8787db96d56Sopenharmony_ci
8797db96d56Sopenharmony_ci   .. availability:: Windows.
8807db96d56Sopenharmony_ci
8817db96d56Sopenharmony_ci   .. versionchanged:: 3.2
8827db96d56Sopenharmony_ci      Changed to a named tuple and added *service_pack_minor*,
8837db96d56Sopenharmony_ci      *service_pack_major*, *suite_mask*, and *product_type*.
8847db96d56Sopenharmony_ci
8857db96d56Sopenharmony_ci   .. versionchanged:: 3.6
8867db96d56Sopenharmony_ci      Added *platform_version*
8877db96d56Sopenharmony_ci
8887db96d56Sopenharmony_ci
8897db96d56Sopenharmony_ci.. function:: get_asyncgen_hooks()
8907db96d56Sopenharmony_ci
8917db96d56Sopenharmony_ci   Returns an *asyncgen_hooks* object, which is similar to a
8927db96d56Sopenharmony_ci   :class:`~collections.namedtuple` of the form ``(firstiter, finalizer)``,
8937db96d56Sopenharmony_ci   where *firstiter* and *finalizer* are expected to be either ``None`` or
8947db96d56Sopenharmony_ci   functions which take an :term:`asynchronous generator iterator` as an
8957db96d56Sopenharmony_ci   argument, and are used to schedule finalization of an asynchronous
8967db96d56Sopenharmony_ci   generator by an event loop.
8977db96d56Sopenharmony_ci
8987db96d56Sopenharmony_ci   .. versionadded:: 3.6
8997db96d56Sopenharmony_ci      See :pep:`525` for more details.
9007db96d56Sopenharmony_ci
9017db96d56Sopenharmony_ci   .. note::
9027db96d56Sopenharmony_ci      This function has been added on a provisional basis (see :pep:`411`
9037db96d56Sopenharmony_ci      for details.)
9047db96d56Sopenharmony_ci
9057db96d56Sopenharmony_ci
9067db96d56Sopenharmony_ci.. function:: get_coroutine_origin_tracking_depth()
9077db96d56Sopenharmony_ci
9087db96d56Sopenharmony_ci   Get the current coroutine origin tracking depth, as set by
9097db96d56Sopenharmony_ci   :func:`set_coroutine_origin_tracking_depth`.
9107db96d56Sopenharmony_ci
9117db96d56Sopenharmony_ci   .. versionadded:: 3.7
9127db96d56Sopenharmony_ci
9137db96d56Sopenharmony_ci   .. note::
9147db96d56Sopenharmony_ci      This function has been added on a provisional basis (see :pep:`411`
9157db96d56Sopenharmony_ci      for details.)  Use it only for debugging purposes.
9167db96d56Sopenharmony_ci
9177db96d56Sopenharmony_ci
9187db96d56Sopenharmony_ci.. data:: hash_info
9197db96d56Sopenharmony_ci
9207db96d56Sopenharmony_ci   A :term:`named tuple` giving parameters of the numeric hash
9217db96d56Sopenharmony_ci   implementation.  For more details about hashing of numeric types, see
9227db96d56Sopenharmony_ci   :ref:`numeric-hash`.
9237db96d56Sopenharmony_ci
9247db96d56Sopenharmony_ci   +---------------------+--------------------------------------------------+
9257db96d56Sopenharmony_ci   | attribute           | explanation                                      |
9267db96d56Sopenharmony_ci   +=====================+==================================================+
9277db96d56Sopenharmony_ci   | :const:`width`      | width in bits used for hash values               |
9287db96d56Sopenharmony_ci   +---------------------+--------------------------------------------------+
9297db96d56Sopenharmony_ci   | :const:`modulus`    | prime modulus P used for numeric hash scheme     |
9307db96d56Sopenharmony_ci   +---------------------+--------------------------------------------------+
9317db96d56Sopenharmony_ci   | :const:`inf`        | hash value returned for a positive infinity      |
9327db96d56Sopenharmony_ci   +---------------------+--------------------------------------------------+
9337db96d56Sopenharmony_ci   | :const:`nan`        | (this attribute is no longer used)               |
9347db96d56Sopenharmony_ci   +---------------------+--------------------------------------------------+
9357db96d56Sopenharmony_ci   | :const:`imag`       | multiplier used for the imaginary part of a      |
9367db96d56Sopenharmony_ci   |                     | complex number                                   |
9377db96d56Sopenharmony_ci   +---------------------+--------------------------------------------------+
9387db96d56Sopenharmony_ci   | :const:`algorithm`  | name of the algorithm for hashing of str, bytes, |
9397db96d56Sopenharmony_ci   |                     | and memoryview                                   |
9407db96d56Sopenharmony_ci   +---------------------+--------------------------------------------------+
9417db96d56Sopenharmony_ci   | :const:`hash_bits`  | internal output size of the hash algorithm       |
9427db96d56Sopenharmony_ci   +---------------------+--------------------------------------------------+
9437db96d56Sopenharmony_ci   | :const:`seed_bits`  | size of the seed key of the hash algorithm       |
9447db96d56Sopenharmony_ci   +---------------------+--------------------------------------------------+
9457db96d56Sopenharmony_ci
9467db96d56Sopenharmony_ci
9477db96d56Sopenharmony_ci   .. versionadded:: 3.2
9487db96d56Sopenharmony_ci
9497db96d56Sopenharmony_ci   .. versionchanged:: 3.4
9507db96d56Sopenharmony_ci      Added *algorithm*, *hash_bits* and *seed_bits*
9517db96d56Sopenharmony_ci
9527db96d56Sopenharmony_ci
9537db96d56Sopenharmony_ci.. data:: hexversion
9547db96d56Sopenharmony_ci
9557db96d56Sopenharmony_ci   The version number encoded as a single integer.  This is guaranteed to increase
9567db96d56Sopenharmony_ci   with each version, including proper support for non-production releases.  For
9577db96d56Sopenharmony_ci   example, to test that the Python interpreter is at least version 1.5.2, use::
9587db96d56Sopenharmony_ci
9597db96d56Sopenharmony_ci      if sys.hexversion >= 0x010502F0:
9607db96d56Sopenharmony_ci          # use some advanced feature
9617db96d56Sopenharmony_ci          ...
9627db96d56Sopenharmony_ci      else:
9637db96d56Sopenharmony_ci          # use an alternative implementation or warn the user
9647db96d56Sopenharmony_ci          ...
9657db96d56Sopenharmony_ci
9667db96d56Sopenharmony_ci   This is called ``hexversion`` since it only really looks meaningful when viewed
9677db96d56Sopenharmony_ci   as the result of passing it to the built-in :func:`hex` function.  The
9687db96d56Sopenharmony_ci   :term:`named tuple`  :data:`sys.version_info` may be used for a more
9697db96d56Sopenharmony_ci   human-friendly encoding of the same information.
9707db96d56Sopenharmony_ci
9717db96d56Sopenharmony_ci   More details of ``hexversion`` can be found at :ref:`apiabiversion`.
9727db96d56Sopenharmony_ci
9737db96d56Sopenharmony_ci
9747db96d56Sopenharmony_ci.. data:: implementation
9757db96d56Sopenharmony_ci
9767db96d56Sopenharmony_ci   An object containing information about the implementation of the
9777db96d56Sopenharmony_ci   currently running Python interpreter.  The following attributes are
9787db96d56Sopenharmony_ci   required to exist in all Python implementations.
9797db96d56Sopenharmony_ci
9807db96d56Sopenharmony_ci   *name* is the implementation's identifier, e.g. ``'cpython'``.  The actual
9817db96d56Sopenharmony_ci   string is defined by the Python implementation, but it is guaranteed to be
9827db96d56Sopenharmony_ci   lower case.
9837db96d56Sopenharmony_ci
9847db96d56Sopenharmony_ci   *version* is a named tuple, in the same format as
9857db96d56Sopenharmony_ci   :data:`sys.version_info`.  It represents the version of the Python
9867db96d56Sopenharmony_ci   *implementation*.  This has a distinct meaning from the specific
9877db96d56Sopenharmony_ci   version of the Python *language* to which the currently running
9887db96d56Sopenharmony_ci   interpreter conforms, which ``sys.version_info`` represents.  For
9897db96d56Sopenharmony_ci   example, for PyPy 1.8 ``sys.implementation.version`` might be
9907db96d56Sopenharmony_ci   ``sys.version_info(1, 8, 0, 'final', 0)``, whereas ``sys.version_info``
9917db96d56Sopenharmony_ci   would be ``sys.version_info(2, 7, 2, 'final', 0)``.  For CPython they
9927db96d56Sopenharmony_ci   are the same value, since it is the reference implementation.
9937db96d56Sopenharmony_ci
9947db96d56Sopenharmony_ci   *hexversion* is the implementation version in hexadecimal format, like
9957db96d56Sopenharmony_ci   :data:`sys.hexversion`.
9967db96d56Sopenharmony_ci
9977db96d56Sopenharmony_ci   *cache_tag* is the tag used by the import machinery in the filenames of
9987db96d56Sopenharmony_ci   cached modules.  By convention, it would be a composite of the
9997db96d56Sopenharmony_ci   implementation's name and version, like ``'cpython-33'``.  However, a
10007db96d56Sopenharmony_ci   Python implementation may use some other value if appropriate.  If
10017db96d56Sopenharmony_ci   ``cache_tag`` is set to ``None``, it indicates that module caching should
10027db96d56Sopenharmony_ci   be disabled.
10037db96d56Sopenharmony_ci
10047db96d56Sopenharmony_ci   :data:`sys.implementation` may contain additional attributes specific to
10057db96d56Sopenharmony_ci   the Python implementation.  These non-standard attributes must start with
10067db96d56Sopenharmony_ci   an underscore, and are not described here.  Regardless of its contents,
10077db96d56Sopenharmony_ci   :data:`sys.implementation` will not change during a run of the interpreter,
10087db96d56Sopenharmony_ci   nor between implementation versions.  (It may change between Python
10097db96d56Sopenharmony_ci   language versions, however.)  See :pep:`421` for more information.
10107db96d56Sopenharmony_ci
10117db96d56Sopenharmony_ci   .. versionadded:: 3.3
10127db96d56Sopenharmony_ci
10137db96d56Sopenharmony_ci   .. note::
10147db96d56Sopenharmony_ci
10157db96d56Sopenharmony_ci      The addition of new required attributes must go through the normal PEP
10167db96d56Sopenharmony_ci      process. See :pep:`421` for more information.
10177db96d56Sopenharmony_ci
10187db96d56Sopenharmony_ci.. data:: int_info
10197db96d56Sopenharmony_ci
10207db96d56Sopenharmony_ci   A :term:`named tuple` that holds information about Python's internal
10217db96d56Sopenharmony_ci   representation of integers.  The attributes are read only.
10227db96d56Sopenharmony_ci
10237db96d56Sopenharmony_ci   .. tabularcolumns:: |l|L|
10247db96d56Sopenharmony_ci
10257db96d56Sopenharmony_ci   +----------------------------------------+-----------------------------------------------+
10267db96d56Sopenharmony_ci   | Attribute                              | Explanation                                   |
10277db96d56Sopenharmony_ci   +========================================+===============================================+
10287db96d56Sopenharmony_ci   | :const:`bits_per_digit`                | number of bits held in each digit.  Python    |
10297db96d56Sopenharmony_ci   |                                        | integers are stored internally in base        |
10307db96d56Sopenharmony_ci   |                                        | ``2**int_info.bits_per_digit``                |
10317db96d56Sopenharmony_ci   +----------------------------------------+-----------------------------------------------+
10327db96d56Sopenharmony_ci   | :const:`sizeof_digit`                  | size in bytes of the C type used to           |
10337db96d56Sopenharmony_ci   |                                        | represent a digit                             |
10347db96d56Sopenharmony_ci   +----------------------------------------+-----------------------------------------------+
10357db96d56Sopenharmony_ci   | :const:`default_max_str_digits`        | default value for                             |
10367db96d56Sopenharmony_ci   |                                        | :func:`sys.get_int_max_str_digits` when it    |
10377db96d56Sopenharmony_ci   |                                        | is not otherwise explicitly configured.       |
10387db96d56Sopenharmony_ci   +----------------------------------------+-----------------------------------------------+
10397db96d56Sopenharmony_ci   | :const:`str_digits_check_threshold`    | minimum non-zero value for                    |
10407db96d56Sopenharmony_ci   |                                        | :func:`sys.set_int_max_str_digits`,           |
10417db96d56Sopenharmony_ci   |                                        | :envvar:`PYTHONINTMAXSTRDIGITS`, or           |
10427db96d56Sopenharmony_ci   |                                        | :option:`-X int_max_str_digits <-X>`.         |
10437db96d56Sopenharmony_ci   +----------------------------------------+-----------------------------------------------+
10447db96d56Sopenharmony_ci
10457db96d56Sopenharmony_ci   .. versionadded:: 3.1
10467db96d56Sopenharmony_ci
10477db96d56Sopenharmony_ci   .. versionchanged:: 3.11
10487db96d56Sopenharmony_ci      Added ``default_max_str_digits`` and ``str_digits_check_threshold``.
10497db96d56Sopenharmony_ci
10507db96d56Sopenharmony_ci
10517db96d56Sopenharmony_ci.. data:: __interactivehook__
10527db96d56Sopenharmony_ci
10537db96d56Sopenharmony_ci   When this attribute exists, its value is automatically called (with no
10547db96d56Sopenharmony_ci   arguments) when the interpreter is launched in :ref:`interactive mode
10557db96d56Sopenharmony_ci   <tut-interactive>`.  This is done after the :envvar:`PYTHONSTARTUP` file is
10567db96d56Sopenharmony_ci   read, so that you can set this hook there.  The :mod:`site` module
10577db96d56Sopenharmony_ci   :ref:`sets this <rlcompleter-config>`.
10587db96d56Sopenharmony_ci
10597db96d56Sopenharmony_ci   .. audit-event:: cpython.run_interactivehook hook sys.__interactivehook__
10607db96d56Sopenharmony_ci
10617db96d56Sopenharmony_ci      Raises an :ref:`auditing event <auditing>`
10627db96d56Sopenharmony_ci      ``cpython.run_interactivehook`` with the hook object as the argument when
10637db96d56Sopenharmony_ci      the hook is called on startup.
10647db96d56Sopenharmony_ci
10657db96d56Sopenharmony_ci   .. versionadded:: 3.4
10667db96d56Sopenharmony_ci
10677db96d56Sopenharmony_ci
10687db96d56Sopenharmony_ci.. function:: intern(string)
10697db96d56Sopenharmony_ci
10707db96d56Sopenharmony_ci   Enter *string* in the table of "interned" strings and return the interned string
10717db96d56Sopenharmony_ci   -- which is *string* itself or a copy. Interning strings is useful to gain a
10727db96d56Sopenharmony_ci   little performance on dictionary lookup -- if the keys in a dictionary are
10737db96d56Sopenharmony_ci   interned, and the lookup key is interned, the key comparisons (after hashing)
10747db96d56Sopenharmony_ci   can be done by a pointer compare instead of a string compare.  Normally, the
10757db96d56Sopenharmony_ci   names used in Python programs are automatically interned, and the dictionaries
10767db96d56Sopenharmony_ci   used to hold module, class or instance attributes have interned keys.
10777db96d56Sopenharmony_ci
10787db96d56Sopenharmony_ci   Interned strings are not immortal; you must keep a reference to the return
10797db96d56Sopenharmony_ci   value of :func:`intern` around to benefit from it.
10807db96d56Sopenharmony_ci
10817db96d56Sopenharmony_ci
10827db96d56Sopenharmony_ci.. function:: is_finalizing()
10837db96d56Sopenharmony_ci
10847db96d56Sopenharmony_ci   Return :const:`True` if the Python interpreter is
10857db96d56Sopenharmony_ci   :term:`shutting down <interpreter shutdown>`, :const:`False` otherwise.
10867db96d56Sopenharmony_ci
10877db96d56Sopenharmony_ci   .. versionadded:: 3.5
10887db96d56Sopenharmony_ci
10897db96d56Sopenharmony_ci
10907db96d56Sopenharmony_ci.. data:: last_type
10917db96d56Sopenharmony_ci          last_value
10927db96d56Sopenharmony_ci          last_traceback
10937db96d56Sopenharmony_ci
10947db96d56Sopenharmony_ci   These three variables are not always defined; they are set when an exception is
10957db96d56Sopenharmony_ci   not handled and the interpreter prints an error message and a stack traceback.
10967db96d56Sopenharmony_ci   Their intended use is to allow an interactive user to import a debugger module
10977db96d56Sopenharmony_ci   and engage in post-mortem debugging without having to re-execute the command
10987db96d56Sopenharmony_ci   that caused the error.  (Typical use is ``import pdb; pdb.pm()`` to enter the
10997db96d56Sopenharmony_ci   post-mortem debugger; see :mod:`pdb` module for
11007db96d56Sopenharmony_ci   more information.)
11017db96d56Sopenharmony_ci
11027db96d56Sopenharmony_ci   The meaning of the variables is the same as that of the return values from
11037db96d56Sopenharmony_ci   :func:`exc_info` above.
11047db96d56Sopenharmony_ci
11057db96d56Sopenharmony_ci
11067db96d56Sopenharmony_ci.. data:: maxsize
11077db96d56Sopenharmony_ci
11087db96d56Sopenharmony_ci   An integer giving the maximum value a variable of type :c:type:`Py_ssize_t` can
11097db96d56Sopenharmony_ci   take.  It's usually ``2**31 - 1`` on a 32-bit platform and ``2**63 - 1`` on a
11107db96d56Sopenharmony_ci   64-bit platform.
11117db96d56Sopenharmony_ci
11127db96d56Sopenharmony_ci
11137db96d56Sopenharmony_ci.. data:: maxunicode
11147db96d56Sopenharmony_ci
11157db96d56Sopenharmony_ci   An integer giving the value of the largest Unicode code point,
11167db96d56Sopenharmony_ci   i.e. ``1114111`` (``0x10FFFF`` in hexadecimal).
11177db96d56Sopenharmony_ci
11187db96d56Sopenharmony_ci   .. versionchanged:: 3.3
11197db96d56Sopenharmony_ci      Before :pep:`393`, ``sys.maxunicode`` used to be either ``0xFFFF``
11207db96d56Sopenharmony_ci      or ``0x10FFFF``, depending on the configuration option that specified
11217db96d56Sopenharmony_ci      whether Unicode characters were stored as UCS-2 or UCS-4.
11227db96d56Sopenharmony_ci
11237db96d56Sopenharmony_ci
11247db96d56Sopenharmony_ci.. data:: meta_path
11257db96d56Sopenharmony_ci
11267db96d56Sopenharmony_ci    A list of :term:`meta path finder` objects that have their
11277db96d56Sopenharmony_ci    :meth:`~importlib.abc.MetaPathFinder.find_spec` methods called to see if one
11287db96d56Sopenharmony_ci    of the objects can find the module to be imported. By default, it holds entries
11297db96d56Sopenharmony_ci    that implement Python's default import semantics. The
11307db96d56Sopenharmony_ci    :meth:`~importlib.abc.MetaPathFinder.find_spec` method is called with at
11317db96d56Sopenharmony_ci    least the absolute name of the module being imported. If the module to be
11327db96d56Sopenharmony_ci    imported is contained in a package, then the parent package's :attr:`__path__`
11337db96d56Sopenharmony_ci    attribute is passed in as a second argument. The method returns a
11347db96d56Sopenharmony_ci    :term:`module spec`, or ``None`` if the module cannot be found.
11357db96d56Sopenharmony_ci
11367db96d56Sopenharmony_ci    .. seealso::
11377db96d56Sopenharmony_ci
11387db96d56Sopenharmony_ci        :class:`importlib.abc.MetaPathFinder`
11397db96d56Sopenharmony_ci          The abstract base class defining the interface of finder objects on
11407db96d56Sopenharmony_ci          :data:`meta_path`.
11417db96d56Sopenharmony_ci        :class:`importlib.machinery.ModuleSpec`
11427db96d56Sopenharmony_ci          The concrete class which
11437db96d56Sopenharmony_ci          :meth:`~importlib.abc.MetaPathFinder.find_spec` should return
11447db96d56Sopenharmony_ci          instances of.
11457db96d56Sopenharmony_ci
11467db96d56Sopenharmony_ci    .. versionchanged:: 3.4
11477db96d56Sopenharmony_ci
11487db96d56Sopenharmony_ci        :term:`Module specs <module spec>` were introduced in Python 3.4, by
11497db96d56Sopenharmony_ci        :pep:`451`. Earlier versions of Python looked for a method called
11507db96d56Sopenharmony_ci        :meth:`~importlib.abc.MetaPathFinder.find_module`.
11517db96d56Sopenharmony_ci        This is still called as a fallback if a :data:`meta_path` entry doesn't
11527db96d56Sopenharmony_ci        have a :meth:`~importlib.abc.MetaPathFinder.find_spec` method.
11537db96d56Sopenharmony_ci
11547db96d56Sopenharmony_ci.. data:: modules
11557db96d56Sopenharmony_ci
11567db96d56Sopenharmony_ci   This is a dictionary that maps module names to modules which have already been
11577db96d56Sopenharmony_ci   loaded.  This can be manipulated to force reloading of modules and other tricks.
11587db96d56Sopenharmony_ci   However, replacing the dictionary will not necessarily work as expected and
11597db96d56Sopenharmony_ci   deleting essential items from the dictionary may cause Python to fail.  If
11607db96d56Sopenharmony_ci   you want to iterate over this global dictionary always use
11617db96d56Sopenharmony_ci   ``sys.modules.copy()`` or ``tuple(sys.modules)`` to avoid exceptions as its
11627db96d56Sopenharmony_ci   size may change during iteration as a side effect of code or activity in
11637db96d56Sopenharmony_ci   other threads.
11647db96d56Sopenharmony_ci
11657db96d56Sopenharmony_ci
11667db96d56Sopenharmony_ci.. data:: orig_argv
11677db96d56Sopenharmony_ci
11687db96d56Sopenharmony_ci   The list of the original command line arguments passed to the Python
11697db96d56Sopenharmony_ci   executable.
11707db96d56Sopenharmony_ci
11717db96d56Sopenharmony_ci   See also :data:`sys.argv`.
11727db96d56Sopenharmony_ci
11737db96d56Sopenharmony_ci   .. versionadded:: 3.10
11747db96d56Sopenharmony_ci
11757db96d56Sopenharmony_ci
11767db96d56Sopenharmony_ci.. data:: path
11777db96d56Sopenharmony_ci
11787db96d56Sopenharmony_ci   .. index:: triple: module; search; path
11797db96d56Sopenharmony_ci
11807db96d56Sopenharmony_ci   A list of strings that specifies the search path for modules. Initialized from
11817db96d56Sopenharmony_ci   the environment variable :envvar:`PYTHONPATH`, plus an installation-dependent
11827db96d56Sopenharmony_ci   default.
11837db96d56Sopenharmony_ci
11847db96d56Sopenharmony_ci   By default, as initialized upon program startup, a potentially unsafe path
11857db96d56Sopenharmony_ci   is prepended to :data:`sys.path` (*before* the entries inserted as a result
11867db96d56Sopenharmony_ci   of :envvar:`PYTHONPATH`):
11877db96d56Sopenharmony_ci
11887db96d56Sopenharmony_ci   * ``python -m module`` command line: prepend the current working
11897db96d56Sopenharmony_ci     directory.
11907db96d56Sopenharmony_ci   * ``python script.py`` command line: prepend the script's directory.
11917db96d56Sopenharmony_ci     If it's a symbolic link, resolve symbolic links.
11927db96d56Sopenharmony_ci   * ``python -c code`` and ``python`` (REPL) command lines: prepend an empty
11937db96d56Sopenharmony_ci     string, which means the current working directory.
11947db96d56Sopenharmony_ci
11957db96d56Sopenharmony_ci   To not prepend this potentially unsafe path, use the :option:`-P` command
11967db96d56Sopenharmony_ci   line option or the :envvar:`PYTHONSAFEPATH` environment variable.
11977db96d56Sopenharmony_ci
11987db96d56Sopenharmony_ci   A program is free to modify this list for its own purposes.  Only strings
11997db96d56Sopenharmony_ci   should be added to :data:`sys.path`; all other data types are
12007db96d56Sopenharmony_ci   ignored during import.
12017db96d56Sopenharmony_ci
12027db96d56Sopenharmony_ci
12037db96d56Sopenharmony_ci   .. seealso::
12047db96d56Sopenharmony_ci      * Module :mod:`site` This describes how to use .pth files to
12057db96d56Sopenharmony_ci        extend :data:`sys.path`.
12067db96d56Sopenharmony_ci
12077db96d56Sopenharmony_ci.. data:: path_hooks
12087db96d56Sopenharmony_ci
12097db96d56Sopenharmony_ci    A list of callables that take a path argument to try to create a
12107db96d56Sopenharmony_ci    :term:`finder` for the path. If a finder can be created, it is to be
12117db96d56Sopenharmony_ci    returned by the callable, else raise :exc:`ImportError`.
12127db96d56Sopenharmony_ci
12137db96d56Sopenharmony_ci    Originally specified in :pep:`302`.
12147db96d56Sopenharmony_ci
12157db96d56Sopenharmony_ci
12167db96d56Sopenharmony_ci.. data:: path_importer_cache
12177db96d56Sopenharmony_ci
12187db96d56Sopenharmony_ci    A dictionary acting as a cache for :term:`finder` objects. The keys are
12197db96d56Sopenharmony_ci    paths that have been passed to :data:`sys.path_hooks` and the values are
12207db96d56Sopenharmony_ci    the finders that are found. If a path is a valid file system path but no
12217db96d56Sopenharmony_ci    finder is found on :data:`sys.path_hooks` then ``None`` is
12227db96d56Sopenharmony_ci    stored.
12237db96d56Sopenharmony_ci
12247db96d56Sopenharmony_ci    Originally specified in :pep:`302`.
12257db96d56Sopenharmony_ci
12267db96d56Sopenharmony_ci    .. versionchanged:: 3.3
12277db96d56Sopenharmony_ci       ``None`` is stored instead of :class:`imp.NullImporter` when no finder
12287db96d56Sopenharmony_ci       is found.
12297db96d56Sopenharmony_ci
12307db96d56Sopenharmony_ci
12317db96d56Sopenharmony_ci.. data:: platform
12327db96d56Sopenharmony_ci
12337db96d56Sopenharmony_ci   This string contains a platform identifier that can be used to append
12347db96d56Sopenharmony_ci   platform-specific components to :data:`sys.path`, for instance.
12357db96d56Sopenharmony_ci
12367db96d56Sopenharmony_ci   For Unix systems, except on Linux and AIX, this is the lowercased OS name as
12377db96d56Sopenharmony_ci   returned by ``uname -s`` with the first part of the version as returned by
12387db96d56Sopenharmony_ci   ``uname -r`` appended, e.g. ``'sunos5'`` or ``'freebsd8'``, *at the time
12397db96d56Sopenharmony_ci   when Python was built*.  Unless you want to test for a specific system
12407db96d56Sopenharmony_ci   version, it is therefore recommended to use the following idiom::
12417db96d56Sopenharmony_ci
12427db96d56Sopenharmony_ci      if sys.platform.startswith('freebsd'):
12437db96d56Sopenharmony_ci          # FreeBSD-specific code here...
12447db96d56Sopenharmony_ci      elif sys.platform.startswith('linux'):
12457db96d56Sopenharmony_ci          # Linux-specific code here...
12467db96d56Sopenharmony_ci      elif sys.platform.startswith('aix'):
12477db96d56Sopenharmony_ci          # AIX-specific code here...
12487db96d56Sopenharmony_ci
12497db96d56Sopenharmony_ci   For other systems, the values are:
12507db96d56Sopenharmony_ci
12517db96d56Sopenharmony_ci   ================ ===========================
12527db96d56Sopenharmony_ci   System           ``platform`` value
12537db96d56Sopenharmony_ci   ================ ===========================
12547db96d56Sopenharmony_ci   AIX              ``'aix'``
12557db96d56Sopenharmony_ci   Emscripten       ``'emscripten'``
12567db96d56Sopenharmony_ci   Linux            ``'linux'``
12577db96d56Sopenharmony_ci   WASI             ``'wasi'``
12587db96d56Sopenharmony_ci   Windows          ``'win32'``
12597db96d56Sopenharmony_ci   Windows/Cygwin   ``'cygwin'``
12607db96d56Sopenharmony_ci   macOS            ``'darwin'``
12617db96d56Sopenharmony_ci   ================ ===========================
12627db96d56Sopenharmony_ci
12637db96d56Sopenharmony_ci   .. versionchanged:: 3.3
12647db96d56Sopenharmony_ci      On Linux, :attr:`sys.platform` doesn't contain the major version anymore.
12657db96d56Sopenharmony_ci      It is always ``'linux'``, instead of ``'linux2'`` or ``'linux3'``.  Since
12667db96d56Sopenharmony_ci      older Python versions include the version number, it is recommended to
12677db96d56Sopenharmony_ci      always use the ``startswith`` idiom presented above.
12687db96d56Sopenharmony_ci
12697db96d56Sopenharmony_ci   .. versionchanged:: 3.8
12707db96d56Sopenharmony_ci      On AIX, :attr:`sys.platform` doesn't contain the major version anymore.
12717db96d56Sopenharmony_ci      It is always ``'aix'``, instead of ``'aix5'`` or ``'aix7'``.  Since
12727db96d56Sopenharmony_ci      older Python versions include the version number, it is recommended to
12737db96d56Sopenharmony_ci      always use the ``startswith`` idiom presented above.
12747db96d56Sopenharmony_ci
12757db96d56Sopenharmony_ci   .. seealso::
12767db96d56Sopenharmony_ci
12777db96d56Sopenharmony_ci      :attr:`os.name` has a coarser granularity.  :func:`os.uname` gives
12787db96d56Sopenharmony_ci      system-dependent version information.
12797db96d56Sopenharmony_ci
12807db96d56Sopenharmony_ci      The :mod:`platform` module provides detailed checks for the
12817db96d56Sopenharmony_ci      system's identity.
12827db96d56Sopenharmony_ci
12837db96d56Sopenharmony_ci
12847db96d56Sopenharmony_ci.. data:: platlibdir
12857db96d56Sopenharmony_ci
12867db96d56Sopenharmony_ci   Name of the platform-specific library directory. It is used to build the
12877db96d56Sopenharmony_ci   path of standard library and the paths of installed extension modules.
12887db96d56Sopenharmony_ci
12897db96d56Sopenharmony_ci   It is equal to ``"lib"`` on most platforms. On Fedora and SuSE, it is equal
12907db96d56Sopenharmony_ci   to ``"lib64"`` on 64-bit platforms which gives the following ``sys.path``
12917db96d56Sopenharmony_ci   paths (where ``X.Y`` is the Python ``major.minor`` version):
12927db96d56Sopenharmony_ci
12937db96d56Sopenharmony_ci   * ``/usr/lib64/pythonX.Y/``:
12947db96d56Sopenharmony_ci     Standard library (like ``os.py`` of the :mod:`os` module)
12957db96d56Sopenharmony_ci   * ``/usr/lib64/pythonX.Y/lib-dynload/``:
12967db96d56Sopenharmony_ci     C extension modules of the standard library (like the :mod:`errno` module,
12977db96d56Sopenharmony_ci     the exact filename is platform specific)
12987db96d56Sopenharmony_ci   * ``/usr/lib/pythonX.Y/site-packages/`` (always use ``lib``, not
12997db96d56Sopenharmony_ci     :data:`sys.platlibdir`): Third-party modules
13007db96d56Sopenharmony_ci   * ``/usr/lib64/pythonX.Y/site-packages/``:
13017db96d56Sopenharmony_ci     C extension modules of third-party packages
13027db96d56Sopenharmony_ci
13037db96d56Sopenharmony_ci   .. versionadded:: 3.9
13047db96d56Sopenharmony_ci
13057db96d56Sopenharmony_ci
13067db96d56Sopenharmony_ci.. data:: prefix
13077db96d56Sopenharmony_ci
13087db96d56Sopenharmony_ci   A string giving the site-specific directory prefix where the platform
13097db96d56Sopenharmony_ci   independent Python files are installed; on Unix, the default is
13107db96d56Sopenharmony_ci   :file:`/usr/local`. This can be set at build time with the :option:`--prefix`
13117db96d56Sopenharmony_ci   argument to the :program:`configure` script.  See
13127db96d56Sopenharmony_ci   :ref:`installation_paths` for derived paths.
13137db96d56Sopenharmony_ci
13147db96d56Sopenharmony_ci   .. note:: If a :ref:`virtual environment <venv-def>` is in effect, this
13157db96d56Sopenharmony_ci      value will be changed in ``site.py`` to point to the virtual
13167db96d56Sopenharmony_ci      environment. The value for the Python installation will still be
13177db96d56Sopenharmony_ci      available, via :data:`base_prefix`.
13187db96d56Sopenharmony_ci
13197db96d56Sopenharmony_ci
13207db96d56Sopenharmony_ci.. data:: ps1
13217db96d56Sopenharmony_ci          ps2
13227db96d56Sopenharmony_ci
13237db96d56Sopenharmony_ci   .. index::
13247db96d56Sopenharmony_ci      single: interpreter prompts
13257db96d56Sopenharmony_ci      single: prompts, interpreter
13267db96d56Sopenharmony_ci      single: >>>; interpreter prompt
13277db96d56Sopenharmony_ci      single: ...; interpreter prompt
13287db96d56Sopenharmony_ci
13297db96d56Sopenharmony_ci   Strings specifying the primary and secondary prompt of the interpreter.  These
13307db96d56Sopenharmony_ci   are only defined if the interpreter is in interactive mode.  Their initial
13317db96d56Sopenharmony_ci   values in this case are ``'>>> '`` and ``'... '``.  If a non-string object is
13327db96d56Sopenharmony_ci   assigned to either variable, its :func:`str` is re-evaluated each time the
13337db96d56Sopenharmony_ci   interpreter prepares to read a new interactive command; this can be used to
13347db96d56Sopenharmony_ci   implement a dynamic prompt.
13357db96d56Sopenharmony_ci
13367db96d56Sopenharmony_ci
13377db96d56Sopenharmony_ci.. function:: setdlopenflags(n)
13387db96d56Sopenharmony_ci
13397db96d56Sopenharmony_ci   Set the flags used by the interpreter for :c:func:`dlopen` calls, such as when
13407db96d56Sopenharmony_ci   the interpreter loads extension modules.  Among other things, this will enable a
13417db96d56Sopenharmony_ci   lazy resolving of symbols when importing a module, if called as
13427db96d56Sopenharmony_ci   ``sys.setdlopenflags(0)``.  To share symbols across extension modules, call as
13437db96d56Sopenharmony_ci   ``sys.setdlopenflags(os.RTLD_GLOBAL)``.  Symbolic names for the flag values
13447db96d56Sopenharmony_ci   can be found in the :mod:`os` module (``RTLD_xxx`` constants, e.g.
13457db96d56Sopenharmony_ci   :data:`os.RTLD_LAZY`).
13467db96d56Sopenharmony_ci
13477db96d56Sopenharmony_ci   .. availability:: Unix.
13487db96d56Sopenharmony_ci
13497db96d56Sopenharmony_ci.. function:: set_int_max_str_digits(maxdigits)
13507db96d56Sopenharmony_ci
13517db96d56Sopenharmony_ci   Set the :ref:`integer string conversion length limitation
13527db96d56Sopenharmony_ci   <int_max_str_digits>` used by this interpreter. See also
13537db96d56Sopenharmony_ci   :func:`get_int_max_str_digits`.
13547db96d56Sopenharmony_ci
13557db96d56Sopenharmony_ci   .. versionadded:: 3.11
13567db96d56Sopenharmony_ci
13577db96d56Sopenharmony_ci.. function:: setprofile(profilefunc)
13587db96d56Sopenharmony_ci
13597db96d56Sopenharmony_ci   .. index::
13607db96d56Sopenharmony_ci      single: profile function
13617db96d56Sopenharmony_ci      single: profiler
13627db96d56Sopenharmony_ci
13637db96d56Sopenharmony_ci   Set the system's profile function, which allows you to implement a Python source
13647db96d56Sopenharmony_ci   code profiler in Python.  See chapter :ref:`profile` for more information on the
13657db96d56Sopenharmony_ci   Python profiler.  The system's profile function is called similarly to the
13667db96d56Sopenharmony_ci   system's trace function (see :func:`settrace`), but it is called with different events,
13677db96d56Sopenharmony_ci   for example it isn't called for each executed line of code (only on call and return,
13687db96d56Sopenharmony_ci   but the return event is reported even when an exception has been set). The function is
13697db96d56Sopenharmony_ci   thread-specific, but there is no way for the profiler to know about context switches between
13707db96d56Sopenharmony_ci   threads, so it does not make sense to use this in the presence of multiple threads. Also,
13717db96d56Sopenharmony_ci   its return value is not used, so it can simply return ``None``.  Error in the profile
13727db96d56Sopenharmony_ci   function will cause itself unset.
13737db96d56Sopenharmony_ci
13747db96d56Sopenharmony_ci   Profile functions should have three arguments: *frame*, *event*, and
13757db96d56Sopenharmony_ci   *arg*. *frame* is the current stack frame.  *event* is a string: ``'call'``,
13767db96d56Sopenharmony_ci   ``'return'``, ``'c_call'``, ``'c_return'``, or ``'c_exception'``. *arg* depends
13777db96d56Sopenharmony_ci   on the event type.
13787db96d56Sopenharmony_ci
13797db96d56Sopenharmony_ci   .. audit-event:: sys.setprofile "" sys.setprofile
13807db96d56Sopenharmony_ci
13817db96d56Sopenharmony_ci   The events have the following meaning:
13827db96d56Sopenharmony_ci
13837db96d56Sopenharmony_ci   ``'call'``
13847db96d56Sopenharmony_ci      A function is called (or some other code block entered).  The
13857db96d56Sopenharmony_ci      profile function is called; *arg* is ``None``.
13867db96d56Sopenharmony_ci
13877db96d56Sopenharmony_ci   ``'return'``
13887db96d56Sopenharmony_ci      A function (or other code block) is about to return.  The profile
13897db96d56Sopenharmony_ci      function is called; *arg* is the value that will be returned, or ``None``
13907db96d56Sopenharmony_ci      if the event is caused by an exception being raised.
13917db96d56Sopenharmony_ci
13927db96d56Sopenharmony_ci   ``'c_call'``
13937db96d56Sopenharmony_ci      A C function is about to be called.  This may be an extension function or
13947db96d56Sopenharmony_ci      a built-in.  *arg* is the C function object.
13957db96d56Sopenharmony_ci
13967db96d56Sopenharmony_ci   ``'c_return'``
13977db96d56Sopenharmony_ci      A C function has returned. *arg* is the C function object.
13987db96d56Sopenharmony_ci
13997db96d56Sopenharmony_ci   ``'c_exception'``
14007db96d56Sopenharmony_ci      A C function has raised an exception.  *arg* is the C function object.
14017db96d56Sopenharmony_ci
14027db96d56Sopenharmony_ci.. function:: setrecursionlimit(limit)
14037db96d56Sopenharmony_ci
14047db96d56Sopenharmony_ci   Set the maximum depth of the Python interpreter stack to *limit*.  This limit
14057db96d56Sopenharmony_ci   prevents infinite recursion from causing an overflow of the C stack and crashing
14067db96d56Sopenharmony_ci   Python.
14077db96d56Sopenharmony_ci
14087db96d56Sopenharmony_ci   The highest possible limit is platform-dependent.  A user may need to set the
14097db96d56Sopenharmony_ci   limit higher when they have a program that requires deep recursion and a platform
14107db96d56Sopenharmony_ci   that supports a higher limit.  This should be done with care, because a too-high
14117db96d56Sopenharmony_ci   limit can lead to a crash.
14127db96d56Sopenharmony_ci
14137db96d56Sopenharmony_ci   If the new limit is too low at the current recursion depth, a
14147db96d56Sopenharmony_ci   :exc:`RecursionError` exception is raised.
14157db96d56Sopenharmony_ci
14167db96d56Sopenharmony_ci   .. versionchanged:: 3.5.1
14177db96d56Sopenharmony_ci      A :exc:`RecursionError` exception is now raised if the new limit is too
14187db96d56Sopenharmony_ci      low at the current recursion depth.
14197db96d56Sopenharmony_ci
14207db96d56Sopenharmony_ci
14217db96d56Sopenharmony_ci.. function:: setswitchinterval(interval)
14227db96d56Sopenharmony_ci
14237db96d56Sopenharmony_ci   Set the interpreter's thread switch interval (in seconds).  This floating-point
14247db96d56Sopenharmony_ci   value determines the ideal duration of the "timeslices" allocated to
14257db96d56Sopenharmony_ci   concurrently running Python threads.  Please note that the actual value
14267db96d56Sopenharmony_ci   can be higher, especially if long-running internal functions or methods
14277db96d56Sopenharmony_ci   are used.  Also, which thread becomes scheduled at the end of the interval
14287db96d56Sopenharmony_ci   is the operating system's decision.  The interpreter doesn't have its
14297db96d56Sopenharmony_ci   own scheduler.
14307db96d56Sopenharmony_ci
14317db96d56Sopenharmony_ci   .. versionadded:: 3.2
14327db96d56Sopenharmony_ci
14337db96d56Sopenharmony_ci
14347db96d56Sopenharmony_ci.. function:: settrace(tracefunc)
14357db96d56Sopenharmony_ci
14367db96d56Sopenharmony_ci   .. index::
14377db96d56Sopenharmony_ci      single: trace function
14387db96d56Sopenharmony_ci      single: debugger
14397db96d56Sopenharmony_ci
14407db96d56Sopenharmony_ci   Set the system's trace function, which allows you to implement a Python
14417db96d56Sopenharmony_ci   source code debugger in Python.  The function is thread-specific; for a
14427db96d56Sopenharmony_ci   debugger to support multiple threads, it must register a trace function using
14437db96d56Sopenharmony_ci   :func:`settrace` for each thread being debugged or use :func:`threading.settrace`.
14447db96d56Sopenharmony_ci
14457db96d56Sopenharmony_ci   Trace functions should have three arguments: *frame*, *event*, and
14467db96d56Sopenharmony_ci   *arg*. *frame* is the current stack frame.  *event* is a string: ``'call'``,
14477db96d56Sopenharmony_ci   ``'line'``, ``'return'``, ``'exception'`` or ``'opcode'``.  *arg* depends on
14487db96d56Sopenharmony_ci   the event type.
14497db96d56Sopenharmony_ci
14507db96d56Sopenharmony_ci   The trace function is invoked (with *event* set to ``'call'``) whenever a new
14517db96d56Sopenharmony_ci   local scope is entered; it should return a reference to a local trace
14527db96d56Sopenharmony_ci   function to be used for the new scope, or ``None`` if the scope shouldn't be
14537db96d56Sopenharmony_ci   traced.
14547db96d56Sopenharmony_ci
14557db96d56Sopenharmony_ci   The local trace function should return a reference to itself (or to another
14567db96d56Sopenharmony_ci   function for further tracing in that scope), or ``None`` to turn off tracing
14577db96d56Sopenharmony_ci   in that scope.
14587db96d56Sopenharmony_ci
14597db96d56Sopenharmony_ci   If there is any error occurred in the trace function, it will be unset, just
14607db96d56Sopenharmony_ci   like ``settrace(None)`` is called.
14617db96d56Sopenharmony_ci
14627db96d56Sopenharmony_ci   The events have the following meaning:
14637db96d56Sopenharmony_ci
14647db96d56Sopenharmony_ci   ``'call'``
14657db96d56Sopenharmony_ci      A function is called (or some other code block entered).  The
14667db96d56Sopenharmony_ci      global trace function is called; *arg* is ``None``; the return value
14677db96d56Sopenharmony_ci      specifies the local trace function.
14687db96d56Sopenharmony_ci
14697db96d56Sopenharmony_ci   ``'line'``
14707db96d56Sopenharmony_ci      The interpreter is about to execute a new line of code or re-execute the
14717db96d56Sopenharmony_ci      condition of a loop.  The local trace function is called; *arg* is
14727db96d56Sopenharmony_ci      ``None``; the return value specifies the new local trace function.  See
14737db96d56Sopenharmony_ci      :file:`Objects/lnotab_notes.txt` for a detailed explanation of how this
14747db96d56Sopenharmony_ci      works.
14757db96d56Sopenharmony_ci      Per-line events may be disabled for a frame by setting
14767db96d56Sopenharmony_ci      :attr:`f_trace_lines` to :const:`False` on that frame.
14777db96d56Sopenharmony_ci
14787db96d56Sopenharmony_ci   ``'return'``
14797db96d56Sopenharmony_ci      A function (or other code block) is about to return.  The local trace
14807db96d56Sopenharmony_ci      function is called; *arg* is the value that will be returned, or ``None``
14817db96d56Sopenharmony_ci      if the event is caused by an exception being raised.  The trace function's
14827db96d56Sopenharmony_ci      return value is ignored.
14837db96d56Sopenharmony_ci
14847db96d56Sopenharmony_ci   ``'exception'``
14857db96d56Sopenharmony_ci      An exception has occurred.  The local trace function is called; *arg* is a
14867db96d56Sopenharmony_ci      tuple ``(exception, value, traceback)``; the return value specifies the
14877db96d56Sopenharmony_ci      new local trace function.
14887db96d56Sopenharmony_ci
14897db96d56Sopenharmony_ci   ``'opcode'``
14907db96d56Sopenharmony_ci      The interpreter is about to execute a new opcode (see :mod:`dis` for
14917db96d56Sopenharmony_ci      opcode details).  The local trace function is called; *arg* is
14927db96d56Sopenharmony_ci      ``None``; the return value specifies the new local trace function.
14937db96d56Sopenharmony_ci      Per-opcode events are not emitted by default: they must be explicitly
14947db96d56Sopenharmony_ci      requested by setting :attr:`f_trace_opcodes` to :const:`True` on the
14957db96d56Sopenharmony_ci      frame.
14967db96d56Sopenharmony_ci
14977db96d56Sopenharmony_ci   Note that as an exception is propagated down the chain of callers, an
14987db96d56Sopenharmony_ci   ``'exception'`` event is generated at each level.
14997db96d56Sopenharmony_ci
15007db96d56Sopenharmony_ci   For more fine-grained usage, it's possible to set a trace function by
15017db96d56Sopenharmony_ci   assigning ``frame.f_trace = tracefunc`` explicitly, rather than relying on
15027db96d56Sopenharmony_ci   it being set indirectly via the return value from an already installed
15037db96d56Sopenharmony_ci   trace function. This is also required for activating the trace function on
15047db96d56Sopenharmony_ci   the current frame, which :func:`settrace` doesn't do. Note that in order
15057db96d56Sopenharmony_ci   for this to work, a global tracing function must have been installed
15067db96d56Sopenharmony_ci   with :func:`settrace` in order to enable the runtime tracing machinery,
15077db96d56Sopenharmony_ci   but it doesn't need to be the same tracing function (e.g. it could be a
15087db96d56Sopenharmony_ci   low overhead tracing function that simply returns ``None`` to disable
15097db96d56Sopenharmony_ci   itself immediately on each frame).
15107db96d56Sopenharmony_ci
15117db96d56Sopenharmony_ci   For more information on code and frame objects, refer to :ref:`types`.
15127db96d56Sopenharmony_ci
15137db96d56Sopenharmony_ci   .. audit-event:: sys.settrace "" sys.settrace
15147db96d56Sopenharmony_ci
15157db96d56Sopenharmony_ci   .. impl-detail::
15167db96d56Sopenharmony_ci
15177db96d56Sopenharmony_ci      The :func:`settrace` function is intended only for implementing debuggers,
15187db96d56Sopenharmony_ci      profilers, coverage tools and the like.  Its behavior is part of the
15197db96d56Sopenharmony_ci      implementation platform, rather than part of the language definition, and
15207db96d56Sopenharmony_ci      thus may not be available in all Python implementations.
15217db96d56Sopenharmony_ci
15227db96d56Sopenharmony_ci   .. versionchanged:: 3.7
15237db96d56Sopenharmony_ci
15247db96d56Sopenharmony_ci      ``'opcode'`` event type added; :attr:`f_trace_lines` and
15257db96d56Sopenharmony_ci      :attr:`f_trace_opcodes` attributes added to frames
15267db96d56Sopenharmony_ci
15277db96d56Sopenharmony_ci.. function:: set_asyncgen_hooks(firstiter, finalizer)
15287db96d56Sopenharmony_ci
15297db96d56Sopenharmony_ci   Accepts two optional keyword arguments which are callables that accept an
15307db96d56Sopenharmony_ci   :term:`asynchronous generator iterator` as an argument. The *firstiter*
15317db96d56Sopenharmony_ci   callable will be called when an asynchronous generator is iterated for the
15327db96d56Sopenharmony_ci   first time. The *finalizer* will be called when an asynchronous generator
15337db96d56Sopenharmony_ci   is about to be garbage collected.
15347db96d56Sopenharmony_ci
15357db96d56Sopenharmony_ci   .. audit-event:: sys.set_asyncgen_hooks_firstiter "" sys.set_asyncgen_hooks
15367db96d56Sopenharmony_ci
15377db96d56Sopenharmony_ci   .. audit-event:: sys.set_asyncgen_hooks_finalizer "" sys.set_asyncgen_hooks
15387db96d56Sopenharmony_ci
15397db96d56Sopenharmony_ci   Two auditing events are raised because the underlying API consists of two
15407db96d56Sopenharmony_ci   calls, each of which must raise its own event.
15417db96d56Sopenharmony_ci
15427db96d56Sopenharmony_ci   .. versionadded:: 3.6
15437db96d56Sopenharmony_ci      See :pep:`525` for more details, and for a reference example of a
15447db96d56Sopenharmony_ci      *finalizer* method see the implementation of
15457db96d56Sopenharmony_ci      ``asyncio.Loop.shutdown_asyncgens`` in
15467db96d56Sopenharmony_ci      :source:`Lib/asyncio/base_events.py`
15477db96d56Sopenharmony_ci
15487db96d56Sopenharmony_ci   .. note::
15497db96d56Sopenharmony_ci      This function has been added on a provisional basis (see :pep:`411`
15507db96d56Sopenharmony_ci      for details.)
15517db96d56Sopenharmony_ci
15527db96d56Sopenharmony_ci.. function:: set_coroutine_origin_tracking_depth(depth)
15537db96d56Sopenharmony_ci
15547db96d56Sopenharmony_ci   Allows enabling or disabling coroutine origin tracking. When
15557db96d56Sopenharmony_ci   enabled, the ``cr_origin`` attribute on coroutine objects will
15567db96d56Sopenharmony_ci   contain a tuple of (filename, line number, function name) tuples
15577db96d56Sopenharmony_ci   describing the traceback where the coroutine object was created,
15587db96d56Sopenharmony_ci   with the most recent call first. When disabled, ``cr_origin`` will
15597db96d56Sopenharmony_ci   be None.
15607db96d56Sopenharmony_ci
15617db96d56Sopenharmony_ci   To enable, pass a *depth* value greater than zero; this sets the
15627db96d56Sopenharmony_ci   number of frames whose information will be captured. To disable,
15637db96d56Sopenharmony_ci   pass set *depth* to zero.
15647db96d56Sopenharmony_ci
15657db96d56Sopenharmony_ci   This setting is thread-specific.
15667db96d56Sopenharmony_ci
15677db96d56Sopenharmony_ci   .. versionadded:: 3.7
15687db96d56Sopenharmony_ci
15697db96d56Sopenharmony_ci   .. note::
15707db96d56Sopenharmony_ci      This function has been added on a provisional basis (see :pep:`411`
15717db96d56Sopenharmony_ci      for details.)  Use it only for debugging purposes.
15727db96d56Sopenharmony_ci
15737db96d56Sopenharmony_ci.. function:: _enablelegacywindowsfsencoding()
15747db96d56Sopenharmony_ci
15757db96d56Sopenharmony_ci   Changes the :term:`filesystem encoding and error handler` to 'mbcs' and
15767db96d56Sopenharmony_ci   'replace' respectively, for consistency with versions of Python prior to
15777db96d56Sopenharmony_ci   3.6.
15787db96d56Sopenharmony_ci
15797db96d56Sopenharmony_ci   This is equivalent to defining the :envvar:`PYTHONLEGACYWINDOWSFSENCODING`
15807db96d56Sopenharmony_ci   environment variable before launching Python.
15817db96d56Sopenharmony_ci
15827db96d56Sopenharmony_ci   See also :func:`sys.getfilesystemencoding` and
15837db96d56Sopenharmony_ci   :func:`sys.getfilesystemencodeerrors`.
15847db96d56Sopenharmony_ci
15857db96d56Sopenharmony_ci   .. availability:: Windows.
15867db96d56Sopenharmony_ci
15877db96d56Sopenharmony_ci   .. versionadded:: 3.6
15887db96d56Sopenharmony_ci      See :pep:`529` for more details.
15897db96d56Sopenharmony_ci
15907db96d56Sopenharmony_ci.. data:: stdin
15917db96d56Sopenharmony_ci          stdout
15927db96d56Sopenharmony_ci          stderr
15937db96d56Sopenharmony_ci
15947db96d56Sopenharmony_ci   :term:`File objects <file object>` used by the interpreter for standard
15957db96d56Sopenharmony_ci   input, output and errors:
15967db96d56Sopenharmony_ci
15977db96d56Sopenharmony_ci   * ``stdin`` is used for all interactive input (including calls to
15987db96d56Sopenharmony_ci     :func:`input`);
15997db96d56Sopenharmony_ci   * ``stdout`` is used for the output of :func:`print` and :term:`expression`
16007db96d56Sopenharmony_ci     statements and for the prompts of :func:`input`;
16017db96d56Sopenharmony_ci   * The interpreter's own prompts and its error messages go to ``stderr``.
16027db96d56Sopenharmony_ci
16037db96d56Sopenharmony_ci   These streams are regular :term:`text files <text file>` like those
16047db96d56Sopenharmony_ci   returned by the :func:`open` function.  Their parameters are chosen as
16057db96d56Sopenharmony_ci   follows:
16067db96d56Sopenharmony_ci
16077db96d56Sopenharmony_ci   * The encoding and error handling are is initialized from
16087db96d56Sopenharmony_ci     :c:member:`PyConfig.stdio_encoding` and :c:member:`PyConfig.stdio_errors`.
16097db96d56Sopenharmony_ci
16107db96d56Sopenharmony_ci     On Windows, UTF-8 is used for the console device.  Non-character
16117db96d56Sopenharmony_ci     devices such as disk files and pipes use the system locale
16127db96d56Sopenharmony_ci     encoding (i.e. the ANSI codepage).  Non-console character
16137db96d56Sopenharmony_ci     devices such as NUL (i.e. where ``isatty()`` returns ``True``) use the
16147db96d56Sopenharmony_ci     value of the console input and output codepages at startup,
16157db96d56Sopenharmony_ci     respectively for stdin and stdout/stderr. This defaults to the
16167db96d56Sopenharmony_ci     system :term:`locale encoding` if the process is not initially attached
16177db96d56Sopenharmony_ci     to a console.
16187db96d56Sopenharmony_ci
16197db96d56Sopenharmony_ci     The special behaviour of the console can be overridden
16207db96d56Sopenharmony_ci     by setting the environment variable PYTHONLEGACYWINDOWSSTDIO
16217db96d56Sopenharmony_ci     before starting Python. In that case, the console codepages are
16227db96d56Sopenharmony_ci     used as for any other character device.
16237db96d56Sopenharmony_ci
16247db96d56Sopenharmony_ci     Under all platforms, you can override the character encoding by
16257db96d56Sopenharmony_ci     setting the :envvar:`PYTHONIOENCODING` environment variable before
16267db96d56Sopenharmony_ci     starting Python or by using the new :option:`-X` ``utf8`` command
16277db96d56Sopenharmony_ci     line option and :envvar:`PYTHONUTF8` environment variable.  However,
16287db96d56Sopenharmony_ci     for the Windows console, this only applies when
16297db96d56Sopenharmony_ci     :envvar:`PYTHONLEGACYWINDOWSSTDIO` is also set.
16307db96d56Sopenharmony_ci
16317db96d56Sopenharmony_ci   * When interactive, the ``stdout`` stream is line-buffered. Otherwise,
16327db96d56Sopenharmony_ci     it is block-buffered like regular text files.  The ``stderr`` stream
16337db96d56Sopenharmony_ci     is line-buffered in both cases.  You can make both streams unbuffered
16347db96d56Sopenharmony_ci     by passing the :option:`-u` command-line option or setting the
16357db96d56Sopenharmony_ci     :envvar:`PYTHONUNBUFFERED` environment variable.
16367db96d56Sopenharmony_ci
16377db96d56Sopenharmony_ci   .. versionchanged:: 3.9
16387db96d56Sopenharmony_ci      Non-interactive ``stderr`` is now line-buffered instead of fully
16397db96d56Sopenharmony_ci      buffered.
16407db96d56Sopenharmony_ci
16417db96d56Sopenharmony_ci   .. note::
16427db96d56Sopenharmony_ci
16437db96d56Sopenharmony_ci      To write or read binary data from/to the standard streams, use the
16447db96d56Sopenharmony_ci      underlying binary :data:`~io.TextIOBase.buffer` object.  For example, to
16457db96d56Sopenharmony_ci      write bytes to :data:`stdout`, use ``sys.stdout.buffer.write(b'abc')``.
16467db96d56Sopenharmony_ci
16477db96d56Sopenharmony_ci      However, if you are writing a library (and do not control in which
16487db96d56Sopenharmony_ci      context its code will be executed), be aware that the standard streams
16497db96d56Sopenharmony_ci      may be replaced with file-like objects like :class:`io.StringIO` which
16507db96d56Sopenharmony_ci      do not support the :attr:`~io.BufferedIOBase.buffer` attribute.
16517db96d56Sopenharmony_ci
16527db96d56Sopenharmony_ci
16537db96d56Sopenharmony_ci.. data:: __stdin__
16547db96d56Sopenharmony_ci          __stdout__
16557db96d56Sopenharmony_ci          __stderr__
16567db96d56Sopenharmony_ci
16577db96d56Sopenharmony_ci   These objects contain the original values of ``stdin``, ``stderr`` and
16587db96d56Sopenharmony_ci   ``stdout`` at the start of the program.  They are used during finalization,
16597db96d56Sopenharmony_ci   and could be useful to print to the actual standard stream no matter if the
16607db96d56Sopenharmony_ci   ``sys.std*`` object has been redirected.
16617db96d56Sopenharmony_ci
16627db96d56Sopenharmony_ci   It can also be used to restore the actual files to known working file objects
16637db96d56Sopenharmony_ci   in case they have been overwritten with a broken object.  However, the
16647db96d56Sopenharmony_ci   preferred way to do this is to explicitly save the previous stream before
16657db96d56Sopenharmony_ci   replacing it, and restore the saved object.
16667db96d56Sopenharmony_ci
16677db96d56Sopenharmony_ci   .. note::
16687db96d56Sopenharmony_ci       Under some conditions ``stdin``, ``stdout`` and ``stderr`` as well as the
16697db96d56Sopenharmony_ci       original values ``__stdin__``, ``__stdout__`` and ``__stderr__`` can be
16707db96d56Sopenharmony_ci       ``None``. It is usually the case for Windows GUI apps that aren't connected
16717db96d56Sopenharmony_ci       to a console and Python apps started with :program:`pythonw`.
16727db96d56Sopenharmony_ci
16737db96d56Sopenharmony_ci
16747db96d56Sopenharmony_ci.. data:: stdlib_module_names
16757db96d56Sopenharmony_ci
16767db96d56Sopenharmony_ci   A frozenset of strings containing the names of standard library modules.
16777db96d56Sopenharmony_ci
16787db96d56Sopenharmony_ci   It is the same on all platforms. Modules which are not available on
16797db96d56Sopenharmony_ci   some platforms and modules disabled at Python build are also listed.
16807db96d56Sopenharmony_ci   All module kinds are listed: pure Python, built-in, frozen and extension
16817db96d56Sopenharmony_ci   modules. Test modules are excluded.
16827db96d56Sopenharmony_ci
16837db96d56Sopenharmony_ci   For packages, only the main package is listed: sub-packages and sub-modules
16847db96d56Sopenharmony_ci   are not listed. For example, the ``email`` package is listed, but the
16857db96d56Sopenharmony_ci   ``email.mime`` sub-package and the ``email.message`` sub-module are not
16867db96d56Sopenharmony_ci   listed.
16877db96d56Sopenharmony_ci
16887db96d56Sopenharmony_ci   See also the :attr:`sys.builtin_module_names` list.
16897db96d56Sopenharmony_ci
16907db96d56Sopenharmony_ci   .. versionadded:: 3.10
16917db96d56Sopenharmony_ci
16927db96d56Sopenharmony_ci
16937db96d56Sopenharmony_ci.. data:: thread_info
16947db96d56Sopenharmony_ci
16957db96d56Sopenharmony_ci   A :term:`named tuple` holding information about the thread
16967db96d56Sopenharmony_ci   implementation.
16977db96d56Sopenharmony_ci
16987db96d56Sopenharmony_ci   .. tabularcolumns:: |l|p{0.7\linewidth}|
16997db96d56Sopenharmony_ci
17007db96d56Sopenharmony_ci   +------------------+---------------------------------------------------------+
17017db96d56Sopenharmony_ci   | Attribute        | Explanation                                             |
17027db96d56Sopenharmony_ci   +==================+=========================================================+
17037db96d56Sopenharmony_ci   | :const:`name`    | Name of the thread implementation:                      |
17047db96d56Sopenharmony_ci   |                  |                                                         |
17057db96d56Sopenharmony_ci   |                  |  * ``'nt'``: Windows threads                            |
17067db96d56Sopenharmony_ci   |                  |  * ``'pthread'``: POSIX threads                         |
17077db96d56Sopenharmony_ci   |                  |  * ``'pthread-stubs'``: stub POSIX threads              |
17087db96d56Sopenharmony_ci   |                  |    (on WebAssembly platforms without threading support) |
17097db96d56Sopenharmony_ci   |                  |  * ``'solaris'``: Solaris threads                       |
17107db96d56Sopenharmony_ci   +------------------+---------------------------------------------------------+
17117db96d56Sopenharmony_ci   | :const:`lock`    | Name of the lock implementation:                        |
17127db96d56Sopenharmony_ci   |                  |                                                         |
17137db96d56Sopenharmony_ci   |                  |  * ``'semaphore'``: a lock uses a semaphore             |
17147db96d56Sopenharmony_ci   |                  |  * ``'mutex+cond'``: a lock uses a mutex                |
17157db96d56Sopenharmony_ci   |                  |    and a condition variable                             |
17167db96d56Sopenharmony_ci   |                  |  * ``None`` if this information is unknown              |
17177db96d56Sopenharmony_ci   +------------------+---------------------------------------------------------+
17187db96d56Sopenharmony_ci   | :const:`version` | Name and version of the thread library. It is a string, |
17197db96d56Sopenharmony_ci   |                  | or ``None`` if this information is unknown.             |
17207db96d56Sopenharmony_ci   +------------------+---------------------------------------------------------+
17217db96d56Sopenharmony_ci
17227db96d56Sopenharmony_ci   .. versionadded:: 3.3
17237db96d56Sopenharmony_ci
17247db96d56Sopenharmony_ci
17257db96d56Sopenharmony_ci.. data:: tracebacklimit
17267db96d56Sopenharmony_ci
17277db96d56Sopenharmony_ci   When this variable is set to an integer value, it determines the maximum number
17287db96d56Sopenharmony_ci   of levels of traceback information printed when an unhandled exception occurs.
17297db96d56Sopenharmony_ci   The default is ``1000``.  When set to ``0`` or less, all traceback information
17307db96d56Sopenharmony_ci   is suppressed and only the exception type and value are printed.
17317db96d56Sopenharmony_ci
17327db96d56Sopenharmony_ci
17337db96d56Sopenharmony_ci.. function:: unraisablehook(unraisable, /)
17347db96d56Sopenharmony_ci
17357db96d56Sopenharmony_ci   Handle an unraisable exception.
17367db96d56Sopenharmony_ci
17377db96d56Sopenharmony_ci   Called when an exception has occurred but there is no way for Python to
17387db96d56Sopenharmony_ci   handle it. For example, when a destructor raises an exception or during
17397db96d56Sopenharmony_ci   garbage collection (:func:`gc.collect`).
17407db96d56Sopenharmony_ci
17417db96d56Sopenharmony_ci   The *unraisable* argument has the following attributes:
17427db96d56Sopenharmony_ci
17437db96d56Sopenharmony_ci   * *exc_type*: Exception type.
17447db96d56Sopenharmony_ci   * *exc_value*: Exception value, can be ``None``.
17457db96d56Sopenharmony_ci   * *exc_traceback*: Exception traceback, can be ``None``.
17467db96d56Sopenharmony_ci   * *err_msg*: Error message, can be ``None``.
17477db96d56Sopenharmony_ci   * *object*: Object causing the exception, can be ``None``.
17487db96d56Sopenharmony_ci
17497db96d56Sopenharmony_ci   The default hook formats *err_msg* and *object* as:
17507db96d56Sopenharmony_ci   ``f'{err_msg}: {object!r}'``; use "Exception ignored in" error message
17517db96d56Sopenharmony_ci   if *err_msg* is ``None``.
17527db96d56Sopenharmony_ci
17537db96d56Sopenharmony_ci   :func:`sys.unraisablehook` can be overridden to control how unraisable
17547db96d56Sopenharmony_ci   exceptions are handled.
17557db96d56Sopenharmony_ci
17567db96d56Sopenharmony_ci   Storing *exc_value* using a custom hook can create a reference cycle. It
17577db96d56Sopenharmony_ci   should be cleared explicitly to break the reference cycle when the
17587db96d56Sopenharmony_ci   exception is no longer needed.
17597db96d56Sopenharmony_ci
17607db96d56Sopenharmony_ci   Storing *object* using a custom hook can resurrect it if it is set to an
17617db96d56Sopenharmony_ci   object which is being finalized. Avoid storing *object* after the custom
17627db96d56Sopenharmony_ci   hook completes to avoid resurrecting objects.
17637db96d56Sopenharmony_ci
17647db96d56Sopenharmony_ci   See also :func:`excepthook` which handles uncaught exceptions.
17657db96d56Sopenharmony_ci
17667db96d56Sopenharmony_ci   .. audit-event:: sys.unraisablehook hook,unraisable sys.unraisablehook
17677db96d56Sopenharmony_ci
17687db96d56Sopenharmony_ci      Raise an auditing event ``sys.unraisablehook`` with arguments
17697db96d56Sopenharmony_ci      ``hook``, ``unraisable`` when an exception that cannot be handled occurs.
17707db96d56Sopenharmony_ci      The ``unraisable`` object is the same as what will be passed to the hook.
17717db96d56Sopenharmony_ci      If no hook has been set, ``hook`` may be ``None``.
17727db96d56Sopenharmony_ci
17737db96d56Sopenharmony_ci   .. versionadded:: 3.8
17747db96d56Sopenharmony_ci
17757db96d56Sopenharmony_ci.. data:: version
17767db96d56Sopenharmony_ci
17777db96d56Sopenharmony_ci   A string containing the version number of the Python interpreter plus additional
17787db96d56Sopenharmony_ci   information on the build number and compiler used.  This string is displayed
17797db96d56Sopenharmony_ci   when the interactive interpreter is started.  Do not extract version information
17807db96d56Sopenharmony_ci   out of it, rather, use :data:`version_info` and the functions provided by the
17817db96d56Sopenharmony_ci   :mod:`platform` module.
17827db96d56Sopenharmony_ci
17837db96d56Sopenharmony_ci
17847db96d56Sopenharmony_ci.. data:: api_version
17857db96d56Sopenharmony_ci
17867db96d56Sopenharmony_ci   The C API version for this interpreter.  Programmers may find this useful when
17877db96d56Sopenharmony_ci   debugging version conflicts between Python and extension modules.
17887db96d56Sopenharmony_ci
17897db96d56Sopenharmony_ci
17907db96d56Sopenharmony_ci.. data:: version_info
17917db96d56Sopenharmony_ci
17927db96d56Sopenharmony_ci   A tuple containing the five components of the version number: *major*, *minor*,
17937db96d56Sopenharmony_ci   *micro*, *releaselevel*, and *serial*.  All values except *releaselevel* are
17947db96d56Sopenharmony_ci   integers; the release level is ``'alpha'``, ``'beta'``, ``'candidate'``, or
17957db96d56Sopenharmony_ci   ``'final'``.  The ``version_info`` value corresponding to the Python version 2.0
17967db96d56Sopenharmony_ci   is ``(2, 0, 0, 'final', 0)``.  The components can also be accessed by name,
17977db96d56Sopenharmony_ci   so ``sys.version_info[0]`` is equivalent to ``sys.version_info.major``
17987db96d56Sopenharmony_ci   and so on.
17997db96d56Sopenharmony_ci
18007db96d56Sopenharmony_ci   .. versionchanged:: 3.1
18017db96d56Sopenharmony_ci      Added named component attributes.
18027db96d56Sopenharmony_ci
18037db96d56Sopenharmony_ci.. data:: warnoptions
18047db96d56Sopenharmony_ci
18057db96d56Sopenharmony_ci   This is an implementation detail of the warnings framework; do not modify this
18067db96d56Sopenharmony_ci   value.  Refer to the :mod:`warnings` module for more information on the warnings
18077db96d56Sopenharmony_ci   framework.
18087db96d56Sopenharmony_ci
18097db96d56Sopenharmony_ci
18107db96d56Sopenharmony_ci.. data:: winver
18117db96d56Sopenharmony_ci
18127db96d56Sopenharmony_ci   The version number used to form registry keys on Windows platforms. This is
18137db96d56Sopenharmony_ci   stored as string resource 1000 in the Python DLL.  The value is normally the
18147db96d56Sopenharmony_ci   major and minor versions of the running Python interpreter.  It is provided in the :mod:`sys`
18157db96d56Sopenharmony_ci   module for informational purposes; modifying this value has no effect on the
18167db96d56Sopenharmony_ci   registry keys used by Python.
18177db96d56Sopenharmony_ci
18187db96d56Sopenharmony_ci   .. availability:: Windows.
18197db96d56Sopenharmony_ci
18207db96d56Sopenharmony_ci
18217db96d56Sopenharmony_ci.. data:: _xoptions
18227db96d56Sopenharmony_ci
18237db96d56Sopenharmony_ci   A dictionary of the various implementation-specific flags passed through
18247db96d56Sopenharmony_ci   the :option:`-X` command-line option.  Option names are either mapped to
18257db96d56Sopenharmony_ci   their values, if given explicitly, or to :const:`True`.  Example:
18267db96d56Sopenharmony_ci
18277db96d56Sopenharmony_ci   .. code-block:: shell-session
18287db96d56Sopenharmony_ci
18297db96d56Sopenharmony_ci      $ ./python -Xa=b -Xc
18307db96d56Sopenharmony_ci      Python 3.2a3+ (py3k, Oct 16 2010, 20:14:50)
18317db96d56Sopenharmony_ci      [GCC 4.4.3] on linux2
18327db96d56Sopenharmony_ci      Type "help", "copyright", "credits" or "license" for more information.
18337db96d56Sopenharmony_ci      >>> import sys
18347db96d56Sopenharmony_ci      >>> sys._xoptions
18357db96d56Sopenharmony_ci      {'a': 'b', 'c': True}
18367db96d56Sopenharmony_ci
18377db96d56Sopenharmony_ci   .. impl-detail::
18387db96d56Sopenharmony_ci
18397db96d56Sopenharmony_ci      This is a CPython-specific way of accessing options passed through
18407db96d56Sopenharmony_ci      :option:`-X`.  Other implementations may export them through other
18417db96d56Sopenharmony_ci      means, or not at all.
18427db96d56Sopenharmony_ci
18437db96d56Sopenharmony_ci   .. versionadded:: 3.2
18447db96d56Sopenharmony_ci
18457db96d56Sopenharmony_ci
18467db96d56Sopenharmony_ci.. rubric:: Citations
18477db96d56Sopenharmony_ci
18487db96d56Sopenharmony_ci.. [C99] ISO/IEC 9899:1999.  "Programming languages -- C."  A public draft of this standard is available at https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf\ .
1849