• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:mod:`sys` --- System-specific parameters and functions
2=======================================================
3
4.. module:: sys
5   :synopsis: Access system-specific parameters and functions.
6
7--------------
8
9This module provides access to some variables used or maintained by the
10interpreter and to functions that interact strongly with the interpreter. It is
11always available.
12
13
14.. data:: abiflags
15
16   On POSIX systems where Python was built with the standard ``configure``
17   script, this contains the ABI flags as specified by :pep:`3149`.
18
19   .. versionchanged:: 3.8
20      Default flags became an empty string (``m`` flag for pymalloc has been
21      removed).
22
23   .. versionadded:: 3.2
24
25
26.. function:: addaudithook(hook)
27
28   Append the callable *hook* to the list of active auditing hooks for the
29   current interpreter.
30
31   When an auditing event is raised through the :func:`sys.audit` function, each
32   hook will be called in the order it was added with the event name and the
33   tuple of arguments. Native hooks added by :c:func:`PySys_AddAuditHook` are
34   called first, followed by hooks added in the current interpreter.
35
36   .. audit-event:: sys.addaudithook "" sys.addaudithook
37
38      Raise an auditing event ``sys.addaudithook`` with no arguments. If any
39      existing hooks raise an exception derived from :class:`RuntimeError`, the
40      new hook will not be added and the exception suppressed. As a result,
41      callers cannot assume that their hook has been added unless they control
42      all existing hooks.
43
44   .. versionadded:: 3.8
45
46   .. versionchanged:: 3.8.1
47
48      Exceptions derived from :class:`Exception` but not :class:`RuntimeError`
49      are no longer suppressed.
50
51   .. impl-detail::
52
53      When tracing is enabled (see :func:`settrace`), Python hooks are only
54      traced if the callable has a ``__cantrace__`` member that is set to a
55      true value. Otherwise, trace functions will skip the hook.
56
57
58.. data:: argv
59
60   The list of command line arguments passed to a Python script. ``argv[0]`` is the
61   script name (it is operating system dependent whether this is a full pathname or
62   not).  If the command was executed using the :option:`-c` command line option to
63   the interpreter, ``argv[0]`` is set to the string ``'-c'``.  If no script name
64   was passed to the Python interpreter, ``argv[0]`` is the empty string.
65
66   To loop over the standard input, or the list of files given on the
67   command line, see the :mod:`fileinput` module.
68
69   .. note::
70      On Unix, command line arguments are passed by bytes from OS.  Python decodes
71      them with filesystem encoding and "surrogateescape" error handler.
72      When you need original bytes, you can get it by
73      ``[os.fsencode(arg) for arg in sys.argv]``.
74
75
76.. _auditing:
77
78.. function:: audit(event, *args)
79
80   .. index:: single: auditing
81
82   Raise an auditing event with any active hooks. The event name is a string
83   identifying the event and its associated schema, which is the number and
84   types of arguments. The schema for a given event is considered public and
85   stable API and should not be modified between releases.
86
87   This function will raise the first exception raised by any hook. In general,
88   these errors should not be handled and should terminate the process as
89   quickly as possible.
90
91   Hooks are added using the :func:`sys.addaudithook` or
92   :c:func:`PySys_AddAuditHook` functions.
93
94   The native equivalent of this function is :c:func:`PySys_Audit`. Using the
95   native function is preferred when possible.
96
97   See the :ref:`audit events table <audit-events>` for all events raised by
98   CPython.
99
100   .. versionadded:: 3.8
101
102
103.. data:: base_exec_prefix
104
105   Set during Python startup, before ``site.py`` is run, to the same value as
106   :data:`exec_prefix`. If not running in a
107   :ref:`virtual environment <venv-def>`, the values will stay the same; if
108   ``site.py`` finds that a virtual environment is in use, the values of
109   :data:`prefix` and :data:`exec_prefix` will be changed to point to the
110   virtual environment, whereas :data:`base_prefix` and
111   :data:`base_exec_prefix` will remain pointing to the base Python
112   installation (the one which the virtual environment was created from).
113
114   .. versionadded:: 3.3
115
116
117.. data:: base_prefix
118
119   Set during Python startup, before ``site.py`` is run, to the same value as
120   :data:`prefix`. If not running in a :ref:`virtual environment <venv-def>`, the values
121   will stay the same; if ``site.py`` finds that a virtual environment is in
122   use, the values of :data:`prefix` and :data:`exec_prefix` will be changed to
123   point to the virtual environment, whereas :data:`base_prefix` and
124   :data:`base_exec_prefix` will remain pointing to the base Python
125   installation (the one which the virtual environment was created from).
126
127   .. versionadded:: 3.3
128
129
130.. data:: byteorder
131
132   An indicator of the native byte order.  This will have the value ``'big'`` on
133   big-endian (most-significant byte first) platforms, and ``'little'`` on
134   little-endian (least-significant byte first) platforms.
135
136
137.. data:: builtin_module_names
138
139   A tuple of strings giving the names of all modules that are compiled into this
140   Python interpreter.  (This information is not available in any other way ---
141   ``modules.keys()`` only lists the imported modules.)
142
143
144.. function:: call_tracing(func, args)
145
146   Call ``func(*args)``, while tracing is enabled.  The tracing state is saved,
147   and restored afterwards.  This is intended to be called from a debugger from
148   a checkpoint, to recursively debug some other code.
149
150
151.. data:: copyright
152
153   A string containing the copyright pertaining to the Python interpreter.
154
155
156.. function:: _clear_type_cache()
157
158   Clear the internal type cache. The type cache is used to speed up attribute
159   and method lookups. Use the function *only* to drop unnecessary references
160   during reference leak debugging.
161
162   This function should be used for internal and specialized purposes only.
163
164
165.. function:: _current_frames()
166
167   Return a dictionary mapping each thread's identifier to the topmost stack frame
168   currently active in that thread at the time the function is called. Note that
169   functions in the :mod:`traceback` module can build the call stack given such a
170   frame.
171
172   This is most useful for debugging deadlock:  this function does not require the
173   deadlocked threads' cooperation, and such threads' call stacks are frozen for as
174   long as they remain deadlocked.  The frame returned for a non-deadlocked thread
175   may bear no relationship to that thread's current activity by the time calling
176   code examines the frame.
177
178   This function should be used for internal and specialized purposes only.
179
180   .. audit-event:: sys._current_frames "" sys._current_frames
181
182
183.. function:: breakpointhook()
184
185   This hook function is called by built-in :func:`breakpoint`.  By default,
186   it drops you into the :mod:`pdb` debugger, but it can be set to any other
187   function so that you can choose which debugger gets used.
188
189   The signature of this function is dependent on what it calls.  For example,
190   the default binding (e.g. ``pdb.set_trace()``) expects no arguments, but
191   you might bind it to a function that expects additional arguments
192   (positional and/or keyword).  The built-in ``breakpoint()`` function passes
193   its ``*args`` and ``**kws`` straight through.  Whatever
194   ``breakpointhooks()`` returns is returned from ``breakpoint()``.
195
196   The default implementation first consults the environment variable
197   :envvar:`PYTHONBREAKPOINT`.  If that is set to ``"0"`` then this function
198   returns immediately; i.e. it is a no-op.  If the environment variable is
199   not set, or is set to the empty string, ``pdb.set_trace()`` is called.
200   Otherwise this variable should name a function to run, using Python's
201   dotted-import nomenclature, e.g. ``package.subpackage.module.function``.
202   In this case, ``package.subpackage.module`` would be imported and the
203   resulting module must have a callable named ``function()``.  This is run,
204   passing in ``*args`` and ``**kws``, and whatever ``function()`` returns,
205   ``sys.breakpointhook()`` returns to the built-in :func:`breakpoint`
206   function.
207
208   Note that if anything goes wrong while importing the callable named by
209   :envvar:`PYTHONBREAKPOINT`, a :exc:`RuntimeWarning` is reported and the
210   breakpoint is ignored.
211
212   Also note that if ``sys.breakpointhook()`` is overridden programmatically,
213   :envvar:`PYTHONBREAKPOINT` is *not* consulted.
214
215   .. versionadded:: 3.7
216
217.. function:: _debugmallocstats()
218
219   Print low-level information to stderr about the state of CPython's memory
220   allocator.
221
222   If Python is configured --with-pydebug, it also performs some expensive
223   internal consistency checks.
224
225   .. versionadded:: 3.3
226
227   .. impl-detail::
228
229      This function is specific to CPython.  The exact output format is not
230      defined here, and may change.
231
232
233.. data:: dllhandle
234
235   Integer specifying the handle of the Python DLL.
236
237   .. availability:: Windows.
238
239
240.. function:: displayhook(value)
241
242   If *value* is not ``None``, this function prints ``repr(value)`` to
243   ``sys.stdout``, and saves *value* in ``builtins._``. If ``repr(value)`` is
244   not encodable to ``sys.stdout.encoding`` with ``sys.stdout.errors`` error
245   handler (which is probably ``'strict'``), encode it to
246   ``sys.stdout.encoding`` with ``'backslashreplace'`` error handler.
247
248   ``sys.displayhook`` is called on the result of evaluating an :term:`expression`
249   entered in an interactive Python session.  The display of these values can be
250   customized by assigning another one-argument function to ``sys.displayhook``.
251
252   Pseudo-code::
253
254       def displayhook(value):
255           if value is None:
256               return
257           # Set '_' to None to avoid recursion
258           builtins._ = None
259           text = repr(value)
260           try:
261               sys.stdout.write(text)
262           except UnicodeEncodeError:
263               bytes = text.encode(sys.stdout.encoding, 'backslashreplace')
264               if hasattr(sys.stdout, 'buffer'):
265                   sys.stdout.buffer.write(bytes)
266               else:
267                   text = bytes.decode(sys.stdout.encoding, 'strict')
268                   sys.stdout.write(text)
269           sys.stdout.write("\n")
270           builtins._ = value
271
272   .. versionchanged:: 3.2
273      Use ``'backslashreplace'`` error handler on :exc:`UnicodeEncodeError`.
274
275
276.. data:: dont_write_bytecode
277
278   If this is true, Python won't try to write ``.pyc`` files on the
279   import of source modules.  This value is initially set to ``True`` or
280   ``False`` depending on the :option:`-B` command line option and the
281   :envvar:`PYTHONDONTWRITEBYTECODE` environment variable, but you can set it
282   yourself to control bytecode file generation.
283
284
285.. data:: pycache_prefix
286
287   If this is set (not ``None``), Python will write bytecode-cache ``.pyc``
288   files to (and read them from) a parallel directory tree rooted at this
289   directory, rather than from ``__pycache__`` directories in the source code
290   tree. Any ``__pycache__`` directories in the source code tree will be ignored
291   and new `.pyc` files written within the pycache prefix. Thus if you use
292   :mod:`compileall` as a pre-build step, you must ensure you run it with the
293   same pycache prefix (if any) that you will use at runtime.
294
295   A relative path is interpreted relative to the current working directory.
296
297   This value is initially set based on the value of the :option:`-X`
298   ``pycache_prefix=PATH`` command-line option or the
299   :envvar:`PYTHONPYCACHEPREFIX` environment variable (command-line takes
300   precedence). If neither are set, it is ``None``.
301
302   .. versionadded:: 3.8
303
304
305.. function:: excepthook(type, value, traceback)
306
307   This function prints out a given traceback and exception to ``sys.stderr``.
308
309   When an exception is raised and uncaught, the interpreter calls
310   ``sys.excepthook`` with three arguments, the exception class, exception
311   instance, and a traceback object.  In an interactive session this happens just
312   before control is returned to the prompt; in a Python program this happens just
313   before the program exits.  The handling of such top-level exceptions can be
314   customized by assigning another three-argument function to ``sys.excepthook``.
315
316   .. audit-event:: sys.excepthook hook,type,value,traceback sys.excepthook
317
318      Raise an auditing event ``sys.excepthook`` with arguments ``hook``,
319      ``type``, ``value``, ``traceback`` when an uncaught exception occurs.
320      If no hook has been set, ``hook`` may be ``None``. If any hook raises
321      an exception derived from :class:`RuntimeError` the call to the hook will
322      be suppressed. Otherwise, the audit hook exception will be reported as
323      unraisable and ``sys.excepthook`` will be called.
324
325   .. seealso::
326
327      The :func:`sys.unraisablehook` function handles unraisable exceptions
328      and the :func:`threading.excepthook` function handles exception raised
329      by :func:`threading.Thread.run`.
330
331
332.. data:: __breakpointhook__
333          __displayhook__
334          __excepthook__
335          __unraisablehook__
336
337   These objects contain the original values of ``breakpointhook``,
338   ``displayhook``, ``excepthook``, and ``unraisablehook`` at the start of the
339   program.  They are saved so that ``breakpointhook``, ``displayhook`` and
340   ``excepthook``, ``unraisablehook`` can be restored in case they happen to
341   get replaced with broken or alternative objects.
342
343   .. versionadded:: 3.7
344      __breakpointhook__
345
346   .. versionadded:: 3.8
347      __unraisablehook__
348
349.. function:: exc_info()
350
351   This function returns a tuple of three values that give information about the
352   exception that is currently being handled.  The information returned is specific
353   both to the current thread and to the current stack frame.  If the current stack
354   frame is not handling an exception, the information is taken from the calling
355   stack frame, or its caller, and so on until a stack frame is found that is
356   handling an exception.  Here, "handling an exception" is defined as "executing
357   an except clause."  For any stack frame, only information about the exception
358   being currently handled is accessible.
359
360   .. index:: object: traceback
361
362   If no exception is being handled anywhere on the stack, a tuple containing
363   three ``None`` values is returned.  Otherwise, the values returned are
364   ``(type, value, traceback)``.  Their meaning is: *type* gets the type of the
365   exception being handled (a subclass of :exc:`BaseException`); *value* gets
366   the exception instance (an instance of the exception type); *traceback* gets
367   a :ref:`traceback object <traceback-objects>` which encapsulates the call
368   stack at the point where the exception originally occurred.
369
370
371.. data:: exec_prefix
372
373   A string giving the site-specific directory prefix where the platform-dependent
374   Python files are installed; by default, this is also ``'/usr/local'``.  This can
375   be set at build time with the ``--exec-prefix`` argument to the
376   :program:`configure` script.  Specifically, all configuration files (e.g. the
377   :file:`pyconfig.h` header file) are installed in the directory
378   :file:`{exec_prefix}/lib/python{X.Y}/config`, and shared library modules are
379   installed in :file:`{exec_prefix}/lib/python{X.Y}/lib-dynload`, where *X.Y*
380   is the version number of Python, for example ``3.2``.
381
382   .. note::
383
384      If a :ref:`virtual environment <venv-def>` is in effect, this
385      value will be changed in ``site.py`` to point to the virtual environment.
386      The value for the Python installation will still be available, via
387      :data:`base_exec_prefix`.
388
389
390.. data:: executable
391
392   A string giving the absolute path of the executable binary for the Python
393   interpreter, on systems where this makes sense. If Python is unable to retrieve
394   the real path to its executable, :data:`sys.executable` will be an empty string
395   or ``None``.
396
397
398.. function:: exit([arg])
399
400   Exit from Python.  This is implemented by raising the :exc:`SystemExit`
401   exception, so cleanup actions specified by finally clauses of :keyword:`try`
402   statements are honored, and it is possible to intercept the exit attempt at
403   an outer level.
404
405   The optional argument *arg* can be an integer giving the exit status
406   (defaulting to zero), or another type of object.  If it is an integer, zero
407   is considered "successful termination" and any nonzero value is considered
408   "abnormal termination" by shells and the like.  Most systems require it to be
409   in the range 0--127, and produce undefined results otherwise.  Some systems
410   have a convention for assigning specific meanings to specific exit codes, but
411   these are generally underdeveloped; Unix programs generally use 2 for command
412   line syntax errors and 1 for all other kind of errors.  If another type of
413   object is passed, ``None`` is equivalent to passing zero, and any other
414   object is printed to :data:`stderr` and results in an exit code of 1.  In
415   particular, ``sys.exit("some error message")`` is a quick way to exit a
416   program when an error occurs.
417
418   Since :func:`exit` ultimately "only" raises an exception, it will only exit
419   the process when called from the main thread, and the exception is not
420   intercepted.
421
422   .. versionchanged:: 3.6
423      If an error occurs in the cleanup after the Python interpreter
424      has caught :exc:`SystemExit` (such as an error flushing buffered data
425      in the standard streams), the exit status is changed to 120.
426
427
428.. data:: flags
429
430   The :term:`named tuple` *flags* exposes the status of command line
431   flags. The attributes are read only.
432
433   ============================= ==============================================================================================================
434   attribute                     flag
435   ============================= ==============================================================================================================
436   :const:`debug`                :option:`-d`
437   :const:`inspect`              :option:`-i`
438   :const:`interactive`          :option:`-i`
439   :const:`isolated`             :option:`-I`
440   :const:`optimize`             :option:`-O` or :option:`-OO`
441   :const:`dont_write_bytecode`  :option:`-B`
442   :const:`no_user_site`         :option:`-s`
443   :const:`no_site`              :option:`-S`
444   :const:`ignore_environment`   :option:`-E`
445   :const:`verbose`              :option:`-v`
446   :const:`bytes_warning`        :option:`-b`
447   :const:`quiet`                :option:`-q`
448   :const:`hash_randomization`   :option:`-R`
449   :const:`dev_mode`             :option:`-X` ``dev``
450   :const:`utf8_mode`            :option:`-X` ``utf8``
451   :const:`int_max_str_digits`   :option:`-X int_max_str_digits <-X>` (:ref:`integer string conversion length limitation <int_max_str_digits>`)
452   ============================= ==============================================================================================================
453
454   .. versionchanged:: 3.2
455      Added ``quiet`` attribute for the new :option:`-q` flag.
456
457   .. versionadded:: 3.2.3
458      The ``hash_randomization`` attribute.
459
460   .. versionchanged:: 3.3
461      Removed obsolete ``division_warning`` attribute.
462
463   .. versionchanged:: 3.4
464      Added ``isolated`` attribute for :option:`-I` ``isolated`` flag.
465
466   .. versionchanged:: 3.7
467      Added ``dev_mode`` attribute for the new :option:`-X` ``dev`` flag
468      and ``utf8_mode`` attribute for the new  :option:`-X` ``utf8`` flag.
469
470   .. versionchanged:: 3.8.2
471      Added the ``int_max_str_digits`` attribute.
472
473
474.. data:: float_info
475
476   A :term:`named tuple` holding information about the float type. It
477   contains low level information about the precision and internal
478   representation.  The values correspond to the various floating-point
479   constants defined in the standard header file :file:`float.h` for the 'C'
480   programming language; see section 5.2.4.2.2 of the 1999 ISO/IEC C standard
481   [C99]_, 'Characteristics of floating types', for details.
482
483   .. tabularcolumns:: |l|l|L|
484
485   +---------------------+----------------+--------------------------------------------------+
486   | attribute           | float.h macro  | explanation                                      |
487   +=====================+================+==================================================+
488   | :const:`epsilon`    | DBL_EPSILON    | difference between 1.0 and the least value       |
489   |                     |                | greater than 1.0 that is representable as a float|
490   +---------------------+----------------+--------------------------------------------------+
491   | :const:`dig`        | DBL_DIG        | maximum number of decimal digits that can be     |
492   |                     |                | faithfully represented in a float;  see below    |
493   +---------------------+----------------+--------------------------------------------------+
494   | :const:`mant_dig`   | DBL_MANT_DIG   | float precision: the number of base-``radix``    |
495   |                     |                | digits in the significand of a float             |
496   +---------------------+----------------+--------------------------------------------------+
497   | :const:`max`        | DBL_MAX        | maximum representable positive finite float      |
498   +---------------------+----------------+--------------------------------------------------+
499   | :const:`max_exp`    | DBL_MAX_EXP    | maximum integer *e* such that ``radix**(e-1)`` is|
500   |                     |                | a representable finite float                     |
501   +---------------------+----------------+--------------------------------------------------+
502   | :const:`max_10_exp` | DBL_MAX_10_EXP | maximum integer *e* such that ``10**e`` is in the|
503   |                     |                | range of representable finite floats             |
504   +---------------------+----------------+--------------------------------------------------+
505   | :const:`min`        | DBL_MIN        | minimum representable positive *normalized* float|
506   +---------------------+----------------+--------------------------------------------------+
507   | :const:`min_exp`    | DBL_MIN_EXP    | minimum integer *e* such that ``radix**(e-1)`` is|
508   |                     |                | a normalized float                               |
509   +---------------------+----------------+--------------------------------------------------+
510   | :const:`min_10_exp` | DBL_MIN_10_EXP | minimum integer *e* such that ``10**e`` is a     |
511   |                     |                | normalized float                                 |
512   +---------------------+----------------+--------------------------------------------------+
513   | :const:`radix`      | FLT_RADIX      | radix of exponent representation                 |
514   +---------------------+----------------+--------------------------------------------------+
515   | :const:`rounds`     | FLT_ROUNDS     | integer constant representing the rounding mode  |
516   |                     |                | used for arithmetic operations.  This reflects   |
517   |                     |                | the value of the system FLT_ROUNDS macro at      |
518   |                     |                | interpreter startup time.  See section 5.2.4.2.2 |
519   |                     |                | of the C99 standard for an explanation of the    |
520   |                     |                | possible values and their meanings.              |
521   +---------------------+----------------+--------------------------------------------------+
522
523   The attribute :attr:`sys.float_info.dig` needs further explanation.  If
524   ``s`` is any string representing a decimal number with at most
525   :attr:`sys.float_info.dig` significant digits, then converting ``s`` to a
526   float and back again will recover a string representing the same decimal
527   value::
528
529      >>> import sys
530      >>> sys.float_info.dig
531      15
532      >>> s = '3.14159265358979'    # decimal string with 15 significant digits
533      >>> format(float(s), '.15g')  # convert to float and back -> same value
534      '3.14159265358979'
535
536   But for strings with more than :attr:`sys.float_info.dig` significant digits,
537   this isn't always true::
538
539      >>> s = '9876543211234567'    # 16 significant digits is too many!
540      >>> format(float(s), '.16g')  # conversion changes value
541      '9876543211234568'
542
543.. data:: float_repr_style
544
545   A string indicating how the :func:`repr` function behaves for
546   floats.  If the string has value ``'short'`` then for a finite
547   float ``x``, ``repr(x)`` aims to produce a short string with the
548   property that ``float(repr(x)) == x``.  This is the usual behaviour
549   in Python 3.1 and later.  Otherwise, ``float_repr_style`` has value
550   ``'legacy'`` and ``repr(x)`` behaves in the same way as it did in
551   versions of Python prior to 3.1.
552
553   .. versionadded:: 3.1
554
555
556.. function:: getallocatedblocks()
557
558   Return the number of memory blocks currently allocated by the interpreter,
559   regardless of their size.  This function is mainly useful for tracking
560   and debugging memory leaks.  Because of the interpreter's internal
561   caches, the result can vary from call to call; you may have to call
562   :func:`_clear_type_cache()` and :func:`gc.collect()` to get more
563   predictable results.
564
565   If a Python build or implementation cannot reasonably compute this
566   information, :func:`getallocatedblocks()` is allowed to return 0 instead.
567
568   .. versionadded:: 3.4
569
570
571.. function:: getandroidapilevel()
572
573   Return the build time API version of Android as an integer.
574
575   .. availability:: Android.
576
577   .. versionadded:: 3.7
578
579
580.. function:: getcheckinterval()
581
582   Return the interpreter's "check interval"; see :func:`setcheckinterval`.
583
584   .. deprecated:: 3.2
585      Use :func:`getswitchinterval` instead.
586
587
588.. function:: getdefaultencoding()
589
590   Return the name of the current default string encoding used by the Unicode
591   implementation.
592
593
594.. function:: getdlopenflags()
595
596   Return the current value of the flags that are used for
597   :c:func:`dlopen` calls.  Symbolic names for the flag values can be
598   found in the :mod:`os` module (``RTLD_xxx`` constants, e.g.
599   :data:`os.RTLD_LAZY`).
600
601   .. availability:: Unix.
602
603
604.. function:: getfilesystemencoding()
605
606   Return the name of the encoding used to convert between Unicode
607   filenames and bytes filenames. For best compatibility, str should be
608   used for filenames in all cases, although representing filenames as bytes
609   is also supported. Functions accepting or returning filenames should support
610   either str or bytes and internally convert to the system's preferred
611   representation.
612
613   This encoding is always ASCII-compatible.
614
615   :func:`os.fsencode` and :func:`os.fsdecode` should be used to ensure that
616   the correct encoding and errors mode are used.
617
618   * In the UTF-8 mode, the encoding is ``utf-8`` on any platform.
619
620   * On macOS, the encoding is ``'utf-8'``.
621
622   * On Unix, the encoding is the locale encoding.
623
624   * On Windows, the encoding may be ``'utf-8'`` or ``'mbcs'``, depending
625     on user configuration.
626
627   * On Android, the encoding is ``'utf-8'``.
628
629   * On VxWorks, the encoding is ``'utf-8'``.
630
631   .. versionchanged:: 3.2
632      :func:`getfilesystemencoding` result cannot be ``None`` anymore.
633
634   .. versionchanged:: 3.6
635      Windows is no longer guaranteed to return ``'mbcs'``. See :pep:`529`
636      and :func:`_enablelegacywindowsfsencoding` for more information.
637
638   .. versionchanged:: 3.7
639      Return 'utf-8' in the UTF-8 mode.
640
641
642.. function:: getfilesystemencodeerrors()
643
644   Return the name of the error mode used to convert between Unicode filenames
645   and bytes filenames. The encoding name is returned from
646   :func:`getfilesystemencoding`.
647
648   :func:`os.fsencode` and :func:`os.fsdecode` should be used to ensure that
649   the correct encoding and errors mode are used.
650
651   .. versionadded:: 3.6
652
653
654.. function:: get_int_max_str_digits()
655
656   Returns the current value for the :ref:`integer string conversion length
657   limitation <int_max_str_digits>`. See also :func:`set_int_max_str_digits`.
658
659   .. versionadded:: 3.8.2
660
661
662.. function:: getrefcount(object)
663
664   Return the reference count of the *object*.  The count returned is generally one
665   higher than you might expect, because it includes the (temporary) reference as
666   an argument to :func:`getrefcount`.
667
668
669.. function:: getrecursionlimit()
670
671   Return the current value of the recursion limit, the maximum depth of the Python
672   interpreter stack.  This limit prevents infinite recursion from causing an
673   overflow of the C stack and crashing Python.  It can be set by
674   :func:`setrecursionlimit`.
675
676
677.. function:: getsizeof(object[, default])
678
679   Return the size of an object in bytes. The object can be any type of
680   object. All built-in objects will return correct results, but this
681   does not have to hold true for third-party extensions as it is implementation
682   specific.
683
684   Only the memory consumption directly attributed to the object is
685   accounted for, not the memory consumption of objects it refers to.
686
687   If given, *default* will be returned if the object does not provide means to
688   retrieve the size.  Otherwise a :exc:`TypeError` will be raised.
689
690   :func:`getsizeof` calls the object's ``__sizeof__`` method and adds an
691   additional garbage collector overhead if the object is managed by the garbage
692   collector.
693
694   See `recursive sizeof recipe <https://code.activestate.com/recipes/577504>`_
695   for an example of using :func:`getsizeof` recursively to find the size of
696   containers and all their contents.
697
698.. function:: getswitchinterval()
699
700   Return the interpreter's "thread switch interval"; see
701   :func:`setswitchinterval`.
702
703   .. versionadded:: 3.2
704
705
706.. function:: _getframe([depth])
707
708   Return a frame object from the call stack.  If optional integer *depth* is
709   given, return the frame object that many calls below the top of the stack.  If
710   that is deeper than the call stack, :exc:`ValueError` is raised.  The default
711   for *depth* is zero, returning the frame at the top of the call stack.
712
713   .. audit-event:: sys._getframe "" sys._getframe
714
715   .. impl-detail::
716
717      This function should be used for internal and specialized purposes only.
718      It is not guaranteed to exist in all implementations of Python.
719
720
721.. function:: getprofile()
722
723   .. index::
724      single: profile function
725      single: profiler
726
727   Get the profiler function as set by :func:`setprofile`.
728
729
730.. function:: gettrace()
731
732   .. index::
733      single: trace function
734      single: debugger
735
736   Get the trace function as set by :func:`settrace`.
737
738   .. impl-detail::
739
740      The :func:`gettrace` function is intended only for implementing debuggers,
741      profilers, coverage tools and the like.  Its behavior is part of the
742      implementation platform, rather than part of the language definition, and
743      thus may not be available in all Python implementations.
744
745
746.. function:: getwindowsversion()
747
748   Return a named tuple describing the Windows version
749   currently running.  The named elements are *major*, *minor*,
750   *build*, *platform*, *service_pack*, *service_pack_minor*,
751   *service_pack_major*, *suite_mask*, *product_type* and
752   *platform_version*. *service_pack* contains a string,
753   *platform_version* a 3-tuple and all other values are
754   integers. The components can also be accessed by name, so
755   ``sys.getwindowsversion()[0]`` is equivalent to
756   ``sys.getwindowsversion().major``. For compatibility with prior
757   versions, only the first 5 elements are retrievable by indexing.
758
759   *platform* will be :const:`2 (VER_PLATFORM_WIN32_NT)`.
760
761   *product_type* may be one of the following values:
762
763   +---------------------------------------+---------------------------------+
764   | Constant                              | Meaning                         |
765   +=======================================+=================================+
766   | :const:`1 (VER_NT_WORKSTATION)`       | The system is a workstation.    |
767   +---------------------------------------+---------------------------------+
768   | :const:`2 (VER_NT_DOMAIN_CONTROLLER)` | The system is a domain          |
769   |                                       | controller.                     |
770   +---------------------------------------+---------------------------------+
771   | :const:`3 (VER_NT_SERVER)`            | The system is a server, but not |
772   |                                       | a domain controller.            |
773   +---------------------------------------+---------------------------------+
774
775   This function wraps the Win32 :c:func:`GetVersionEx` function; see the
776   Microsoft documentation on :c:func:`OSVERSIONINFOEX` for more information
777   about these fields.
778
779   *platform_version* returns the accurate major version, minor version and
780   build number of the current operating system, rather than the version that
781   is being emulated for the process. It is intended for use in logging rather
782   than for feature detection.
783
784   .. availability:: Windows.
785
786   .. versionchanged:: 3.2
787      Changed to a named tuple and added *service_pack_minor*,
788      *service_pack_major*, *suite_mask*, and *product_type*.
789
790   .. versionchanged:: 3.6
791      Added *platform_version*
792
793
794.. function:: get_asyncgen_hooks()
795
796   Returns an *asyncgen_hooks* object, which is similar to a
797   :class:`~collections.namedtuple` of the form `(firstiter, finalizer)`,
798   where *firstiter* and *finalizer* are expected to be either ``None`` or
799   functions which take an :term:`asynchronous generator iterator` as an
800   argument, and are used to schedule finalization of an asynchronous
801   generator by an event loop.
802
803   .. versionadded:: 3.6
804      See :pep:`525` for more details.
805
806   .. note::
807      This function has been added on a provisional basis (see :pep:`411`
808      for details.)
809
810
811.. function:: get_coroutine_origin_tracking_depth()
812
813   Get the current coroutine origin tracking depth, as set by
814   :func:`set_coroutine_origin_tracking_depth`.
815
816   .. versionadded:: 3.7
817
818   .. note::
819      This function has been added on a provisional basis (see :pep:`411`
820      for details.)  Use it only for debugging purposes.
821
822
823.. data:: hash_info
824
825   A :term:`named tuple` giving parameters of the numeric hash
826   implementation.  For more details about hashing of numeric types, see
827   :ref:`numeric-hash`.
828
829   +---------------------+--------------------------------------------------+
830   | attribute           | explanation                                      |
831   +=====================+==================================================+
832   | :const:`width`      | width in bits used for hash values               |
833   +---------------------+--------------------------------------------------+
834   | :const:`modulus`    | prime modulus P used for numeric hash scheme     |
835   +---------------------+--------------------------------------------------+
836   | :const:`inf`        | hash value returned for a positive infinity      |
837   +---------------------+--------------------------------------------------+
838   | :const:`nan`        | hash value returned for a nan                    |
839   +---------------------+--------------------------------------------------+
840   | :const:`imag`       | multiplier used for the imaginary part of a      |
841   |                     | complex number                                   |
842   +---------------------+--------------------------------------------------+
843   | :const:`algorithm`  | name of the algorithm for hashing of str, bytes, |
844   |                     | and memoryview                                   |
845   +---------------------+--------------------------------------------------+
846   | :const:`hash_bits`  | internal output size of the hash algorithm       |
847   +---------------------+--------------------------------------------------+
848   | :const:`seed_bits`  | size of the seed key of the hash algorithm       |
849   +---------------------+--------------------------------------------------+
850
851
852   .. versionadded:: 3.2
853
854   .. versionchanged:: 3.4
855      Added *algorithm*, *hash_bits* and *seed_bits*
856
857
858.. data:: hexversion
859
860   The version number encoded as a single integer.  This is guaranteed to increase
861   with each version, including proper support for non-production releases.  For
862   example, to test that the Python interpreter is at least version 1.5.2, use::
863
864      if sys.hexversion >= 0x010502F0:
865          # use some advanced feature
866          ...
867      else:
868          # use an alternative implementation or warn the user
869          ...
870
871   This is called ``hexversion`` since it only really looks meaningful when viewed
872   as the result of passing it to the built-in :func:`hex` function.  The
873   :term:`named tuple`  :data:`sys.version_info` may be used for a more
874   human-friendly encoding of the same information.
875
876   More details of ``hexversion`` can be found at :ref:`apiabiversion`.
877
878
879.. data:: implementation
880
881   An object containing information about the implementation of the
882   currently running Python interpreter.  The following attributes are
883   required to exist in all Python implementations.
884
885   *name* is the implementation's identifier, e.g. ``'cpython'``.  The actual
886   string is defined by the Python implementation, but it is guaranteed to be
887   lower case.
888
889   *version* is a named tuple, in the same format as
890   :data:`sys.version_info`.  It represents the version of the Python
891   *implementation*.  This has a distinct meaning from the specific
892   version of the Python *language* to which the currently running
893   interpreter conforms, which ``sys.version_info`` represents.  For
894   example, for PyPy 1.8 ``sys.implementation.version`` might be
895   ``sys.version_info(1, 8, 0, 'final', 0)``, whereas ``sys.version_info``
896   would be ``sys.version_info(2, 7, 2, 'final', 0)``.  For CPython they
897   are the same value, since it is the reference implementation.
898
899   *hexversion* is the implementation version in hexadecimal format, like
900   :data:`sys.hexversion`.
901
902   *cache_tag* is the tag used by the import machinery in the filenames of
903   cached modules.  By convention, it would be a composite of the
904   implementation's name and version, like ``'cpython-33'``.  However, a
905   Python implementation may use some other value if appropriate.  If
906   ``cache_tag`` is set to ``None``, it indicates that module caching should
907   be disabled.
908
909   :data:`sys.implementation` may contain additional attributes specific to
910   the Python implementation.  These non-standard attributes must start with
911   an underscore, and are not described here.  Regardless of its contents,
912   :data:`sys.implementation` will not change during a run of the interpreter,
913   nor between implementation versions.  (It may change between Python
914   language versions, however.)  See :pep:`421` for more information.
915
916   .. versionadded:: 3.3
917
918   .. note::
919
920      The addition of new required attributes must go through the normal PEP
921      process. See :pep:`421` for more information.
922
923.. data:: int_info
924
925   A :term:`named tuple` that holds information about Python's internal
926   representation of integers.  The attributes are read only.
927
928   .. tabularcolumns:: |l|L|
929
930   +----------------------------------------+-----------------------------------------------+
931   | Attribute                              | Explanation                                   |
932   +========================================+===============================================+
933   | :const:`bits_per_digit`                | number of bits held in each digit.  Python    |
934   |                                        | integers are stored internally in base        |
935   |                                        | ``2**int_info.bits_per_digit``                |
936   +----------------------------------------+-----------------------------------------------+
937   | :const:`sizeof_digit`                  | size in bytes of the C type used to           |
938   |                                        | represent a digit                             |
939   +----------------------------------------+-----------------------------------------------+
940   | :const:`default_max_str_digits`        | default value for                             |
941   |                                        | :func:`sys.get_int_max_str_digits` when it    |
942   |                                        | is not otherwise explicitly configured.       |
943   +----------------------------------------+-----------------------------------------------+
944   | :const:`str_digits_check_threshold`    | minimum non-zero value for                    |
945   |                                        | :func:`sys.set_int_max_str_digits`,           |
946   |                                        | :envvar:`PYTHONINTMAXSTRDIGITS`, or           |
947   |                                        | :option:`-X int_max_str_digits <-X>`.         |
948   +----------------------------------------+-----------------------------------------------+
949
950   .. versionadded:: 3.1
951
952   .. versionchanged:: 3.8.2
953      Added ``default_max_str_digits`` and ``str_digits_check_threshold``.
954
955
956.. data:: __interactivehook__
957
958   When this attribute exists, its value is automatically called (with no
959   arguments) when the interpreter is launched in :ref:`interactive mode
960   <tut-interactive>`.  This is done after the :envvar:`PYTHONSTARTUP` file is
961   read, so that you can set this hook there.  The :mod:`site` module
962   :ref:`sets this <rlcompleter-config>`.
963
964   .. audit-event:: cpython.run_interactivehook hook sys.__interactivehook__
965
966      Raises an :ref:`auditing event <auditing>`
967      ``cpython.run_interactivehook`` with the hook object as the argument when
968      the hook is called on startup.
969
970   .. versionadded:: 3.4
971
972
973.. function:: intern(string)
974
975   Enter *string* in the table of "interned" strings and return the interned string
976   -- which is *string* itself or a copy. Interning strings is useful to gain a
977   little performance on dictionary lookup -- if the keys in a dictionary are
978   interned, and the lookup key is interned, the key comparisons (after hashing)
979   can be done by a pointer compare instead of a string compare.  Normally, the
980   names used in Python programs are automatically interned, and the dictionaries
981   used to hold module, class or instance attributes have interned keys.
982
983   Interned strings are not immortal; you must keep a reference to the return
984   value of :func:`intern` around to benefit from it.
985
986
987.. function:: is_finalizing()
988
989   Return :const:`True` if the Python interpreter is
990   :term:`shutting down <interpreter shutdown>`, :const:`False` otherwise.
991
992   .. versionadded:: 3.5
993
994
995.. data:: last_type
996          last_value
997          last_traceback
998
999   These three variables are not always defined; they are set when an exception is
1000   not handled and the interpreter prints an error message and a stack traceback.
1001   Their intended use is to allow an interactive user to import a debugger module
1002   and engage in post-mortem debugging without having to re-execute the command
1003   that caused the error.  (Typical use is ``import pdb; pdb.pm()`` to enter the
1004   post-mortem debugger; see :mod:`pdb` module for
1005   more information.)
1006
1007   The meaning of the variables is the same as that of the return values from
1008   :func:`exc_info` above.
1009
1010
1011.. data:: maxsize
1012
1013   An integer giving the maximum value a variable of type :c:type:`Py_ssize_t` can
1014   take.  It's usually ``2**31 - 1`` on a 32-bit platform and ``2**63 - 1`` on a
1015   64-bit platform.
1016
1017
1018.. data:: maxunicode
1019
1020   An integer giving the value of the largest Unicode code point,
1021   i.e. ``1114111`` (``0x10FFFF`` in hexadecimal).
1022
1023   .. versionchanged:: 3.3
1024      Before :pep:`393`, ``sys.maxunicode`` used to be either ``0xFFFF``
1025      or ``0x10FFFF``, depending on the configuration option that specified
1026      whether Unicode characters were stored as UCS-2 or UCS-4.
1027
1028
1029.. data:: meta_path
1030
1031    A list of :term:`meta path finder` objects that have their
1032    :meth:`~importlib.abc.MetaPathFinder.find_spec` methods called to see if one
1033    of the objects can find the module to be imported. The
1034    :meth:`~importlib.abc.MetaPathFinder.find_spec` method is called with at
1035    least the absolute name of the module being imported. If the module to be
1036    imported is contained in a package, then the parent package's :attr:`__path__`
1037    attribute is passed in as a second argument. The method returns a
1038    :term:`module spec`, or ``None`` if the module cannot be found.
1039
1040    .. seealso::
1041
1042        :class:`importlib.abc.MetaPathFinder`
1043          The abstract base class defining the interface of finder objects on
1044          :data:`meta_path`.
1045        :class:`importlib.machinery.ModuleSpec`
1046          The concrete class which
1047          :meth:`~importlib.abc.MetaPathFinder.find_spec` should return
1048          instances of.
1049
1050    .. versionchanged:: 3.4
1051
1052        :term:`Module specs <module spec>` were introduced in Python 3.4, by
1053        :pep:`451`. Earlier versions of Python looked for a method called
1054        :meth:`~importlib.abc.MetaPathFinder.find_module`.
1055        This is still called as a fallback if a :data:`meta_path` entry doesn't
1056        have a :meth:`~importlib.abc.MetaPathFinder.find_spec` method.
1057
1058.. data:: modules
1059
1060   This is a dictionary that maps module names to modules which have already been
1061   loaded.  This can be manipulated to force reloading of modules and other tricks.
1062   However, replacing the dictionary will not necessarily work as expected and
1063   deleting essential items from the dictionary may cause Python to fail.
1064
1065
1066.. data:: path
1067
1068   .. index:: triple: module; search; path
1069
1070   A list of strings that specifies the search path for modules. Initialized from
1071   the environment variable :envvar:`PYTHONPATH`, plus an installation-dependent
1072   default.
1073
1074   As initialized upon program startup, the first item of this list, ``path[0]``,
1075   is the directory containing the script that was used to invoke the Python
1076   interpreter.  If the script directory is not available (e.g.  if the interpreter
1077   is invoked interactively or if the script is read from standard input),
1078   ``path[0]`` is the empty string, which directs Python to search modules in the
1079   current directory first.  Notice that the script directory is inserted *before*
1080   the entries inserted as a result of :envvar:`PYTHONPATH`.
1081
1082   A program is free to modify this list for its own purposes.  Only strings
1083   and bytes should be added to :data:`sys.path`; all other data types are
1084   ignored during import.
1085
1086
1087   .. seealso::
1088      Module :mod:`site` This describes how to use .pth files to extend
1089      :data:`sys.path`.
1090
1091
1092.. data:: path_hooks
1093
1094    A list of callables that take a path argument to try to create a
1095    :term:`finder` for the path. If a finder can be created, it is to be
1096    returned by the callable, else raise :exc:`ImportError`.
1097
1098    Originally specified in :pep:`302`.
1099
1100
1101.. data:: path_importer_cache
1102
1103    A dictionary acting as a cache for :term:`finder` objects. The keys are
1104    paths that have been passed to :data:`sys.path_hooks` and the values are
1105    the finders that are found. If a path is a valid file system path but no
1106    finder is found on :data:`sys.path_hooks` then ``None`` is
1107    stored.
1108
1109    Originally specified in :pep:`302`.
1110
1111    .. versionchanged:: 3.3
1112       ``None`` is stored instead of :class:`imp.NullImporter` when no finder
1113       is found.
1114
1115
1116.. data:: platform
1117
1118   This string contains a platform identifier that can be used to append
1119   platform-specific components to :data:`sys.path`, for instance.
1120
1121   For Unix systems, except on Linux and AIX, this is the lowercased OS name as
1122   returned by ``uname -s`` with the first part of the version as returned by
1123   ``uname -r`` appended, e.g. ``'sunos5'`` or ``'freebsd8'``, *at the time
1124   when Python was built*.  Unless you want to test for a specific system
1125   version, it is therefore recommended to use the following idiom::
1126
1127      if sys.platform.startswith('freebsd'):
1128          # FreeBSD-specific code here...
1129      elif sys.platform.startswith('linux'):
1130          # Linux-specific code here...
1131      elif sys.platform.startswith('aix'):
1132          # AIX-specific code here...
1133
1134   For other systems, the values are:
1135
1136   ================ ===========================
1137   System           ``platform`` value
1138   ================ ===========================
1139   AIX              ``'aix'``
1140   Linux            ``'linux'``
1141   Windows          ``'win32'``
1142   Windows/Cygwin   ``'cygwin'``
1143   macOS            ``'darwin'``
1144   ================ ===========================
1145
1146   .. versionchanged:: 3.3
1147      On Linux, :attr:`sys.platform` doesn't contain the major version anymore.
1148      It is always ``'linux'``, instead of ``'linux2'`` or ``'linux3'``.  Since
1149      older Python versions include the version number, it is recommended to
1150      always use the ``startswith`` idiom presented above.
1151
1152   .. versionchanged:: 3.8
1153      On AIX, :attr:`sys.platform` doesn't contain the major version anymore.
1154      It is always ``'aix'``, instead of ``'aix5'`` or ``'aix7'``.  Since
1155      older Python versions include the version number, it is recommended to
1156      always use the ``startswith`` idiom presented above.
1157
1158   .. seealso::
1159
1160      :attr:`os.name` has a coarser granularity.  :func:`os.uname` gives
1161      system-dependent version information.
1162
1163      The :mod:`platform` module provides detailed checks for the
1164      system's identity.
1165
1166
1167.. data:: prefix
1168
1169   A string giving the site-specific directory prefix where the platform
1170   independent Python files are installed; by default, this is the string
1171   ``'/usr/local'``.  This can be set at build time with the ``--prefix``
1172   argument to the :program:`configure` script.  The main collection of Python
1173   library modules is installed in the directory :file:`{prefix}/lib/python{X.Y}`
1174   while the platform independent header files (all except :file:`pyconfig.h`) are
1175   stored in :file:`{prefix}/include/python{X.Y}`, where *X.Y* is the version
1176   number of Python, for example ``3.2``.
1177
1178   .. note:: If a :ref:`virtual environment <venv-def>` is in effect, this
1179      value will be changed in ``site.py`` to point to the virtual
1180      environment. The value for the Python installation will still be
1181      available, via :data:`base_prefix`.
1182
1183
1184.. data:: ps1
1185          ps2
1186
1187   .. index::
1188      single: interpreter prompts
1189      single: prompts, interpreter
1190      single: >>>; interpreter prompt
1191      single: ...; interpreter prompt
1192
1193   Strings specifying the primary and secondary prompt of the interpreter.  These
1194   are only defined if the interpreter is in interactive mode.  Their initial
1195   values in this case are ``'>>> '`` and ``'... '``.  If a non-string object is
1196   assigned to either variable, its :func:`str` is re-evaluated each time the
1197   interpreter prepares to read a new interactive command; this can be used to
1198   implement a dynamic prompt.
1199
1200
1201.. function:: setcheckinterval(interval)
1202
1203   Set the interpreter's "check interval".  This integer value determines how often
1204   the interpreter checks for periodic things such as thread switches and signal
1205   handlers.  The default is ``100``, meaning the check is performed every 100
1206   Python virtual instructions. Setting it to a larger value may increase
1207   performance for programs using threads.  Setting it to a value ``<=`` 0 checks
1208   every virtual instruction, maximizing responsiveness as well as overhead.
1209
1210   .. deprecated:: 3.2
1211      This function doesn't have an effect anymore, as the internal logic for
1212      thread switching and asynchronous tasks has been rewritten.  Use
1213      :func:`setswitchinterval` instead.
1214
1215
1216.. function:: setdlopenflags(n)
1217
1218   Set the flags used by the interpreter for :c:func:`dlopen` calls, such as when
1219   the interpreter loads extension modules.  Among other things, this will enable a
1220   lazy resolving of symbols when importing a module, if called as
1221   ``sys.setdlopenflags(0)``.  To share symbols across extension modules, call as
1222   ``sys.setdlopenflags(os.RTLD_GLOBAL)``.  Symbolic names for the flag values
1223   can be found in the :mod:`os` module (``RTLD_xxx`` constants, e.g.
1224   :data:`os.RTLD_LAZY`).
1225
1226   .. availability:: Unix.
1227
1228.. function:: set_int_max_str_digits(n)
1229
1230   Set the :ref:`integer string conversion length limitation
1231   <int_max_str_digits>` used by this interpreter. See also
1232   :func:`get_int_max_str_digits`.
1233
1234   .. versionadded:: 3.8.2
1235
1236.. function:: setprofile(profilefunc)
1237
1238   .. index::
1239      single: profile function
1240      single: profiler
1241
1242   Set the system's profile function, which allows you to implement a Python source
1243   code profiler in Python.  See chapter :ref:`profile` for more information on the
1244   Python profiler.  The system's profile function is called similarly to the
1245   system's trace function (see :func:`settrace`), but it is called with different events,
1246   for example it isn't called for each executed line of code (only on call and return,
1247   but the return event is reported even when an exception has been set). The function is
1248   thread-specific, but there is no way for the profiler to know about context switches between
1249   threads, so it does not make sense to use this in the presence of multiple threads. Also,
1250   its return value is not used, so it can simply return ``None``.  Error in the profile
1251   function will cause itself unset.
1252
1253   Profile functions should have three arguments: *frame*, *event*, and
1254   *arg*. *frame* is the current stack frame.  *event* is a string: ``'call'``,
1255   ``'return'``, ``'c_call'``, ``'c_return'``, or ``'c_exception'``. *arg* depends
1256   on the event type.
1257
1258   .. audit-event:: sys.setprofile "" sys.setprofile
1259
1260   The events have the following meaning:
1261
1262   ``'call'``
1263      A function is called (or some other code block entered).  The
1264      profile function is called; *arg* is ``None``.
1265
1266   ``'return'``
1267      A function (or other code block) is about to return.  The profile
1268      function is called; *arg* is the value that will be returned, or ``None``
1269      if the event is caused by an exception being raised.
1270
1271   ``'c_call'``
1272      A C function is about to be called.  This may be an extension function or
1273      a built-in.  *arg* is the C function object.
1274
1275   ``'c_return'``
1276      A C function has returned. *arg* is the C function object.
1277
1278   ``'c_exception'``
1279      A C function has raised an exception.  *arg* is the C function object.
1280
1281.. function:: setrecursionlimit(limit)
1282
1283   Set the maximum depth of the Python interpreter stack to *limit*.  This limit
1284   prevents infinite recursion from causing an overflow of the C stack and crashing
1285   Python.
1286
1287   The highest possible limit is platform-dependent.  A user may need to set the
1288   limit higher when they have a program that requires deep recursion and a platform
1289   that supports a higher limit.  This should be done with care, because a too-high
1290   limit can lead to a crash.
1291
1292   If the new limit is too low at the current recursion depth, a
1293   :exc:`RecursionError` exception is raised.
1294
1295   .. versionchanged:: 3.5.1
1296      A :exc:`RecursionError` exception is now raised if the new limit is too
1297      low at the current recursion depth.
1298
1299
1300.. function:: setswitchinterval(interval)
1301
1302   Set the interpreter's thread switch interval (in seconds).  This floating-point
1303   value determines the ideal duration of the "timeslices" allocated to
1304   concurrently running Python threads.  Please note that the actual value
1305   can be higher, especially if long-running internal functions or methods
1306   are used.  Also, which thread becomes scheduled at the end of the interval
1307   is the operating system's decision.  The interpreter doesn't have its
1308   own scheduler.
1309
1310   .. versionadded:: 3.2
1311
1312
1313.. function:: settrace(tracefunc)
1314
1315   .. index::
1316      single: trace function
1317      single: debugger
1318
1319   Set the system's trace function, which allows you to implement a Python
1320   source code debugger in Python.  The function is thread-specific; for a
1321   debugger to support multiple threads, it must register a trace function using
1322   :func:`settrace` for each thread being debugged or use :func:`threading.settrace`.
1323
1324   Trace functions should have three arguments: *frame*, *event*, and
1325   *arg*. *frame* is the current stack frame.  *event* is a string: ``'call'``,
1326   ``'line'``, ``'return'``, ``'exception'`` or ``'opcode'``.  *arg* depends on
1327   the event type.
1328
1329   The trace function is invoked (with *event* set to ``'call'``) whenever a new
1330   local scope is entered; it should return a reference to a local trace
1331   function to be used for the new scope, or ``None`` if the scope shouldn't be
1332   traced.
1333
1334   The local trace function should return a reference to itself (or to another
1335   function for further tracing in that scope), or ``None`` to turn off tracing
1336   in that scope.
1337
1338   If there is any error occurred in the trace function, it will be unset, just
1339   like ``settrace(None)`` is called.
1340
1341   The events have the following meaning:
1342
1343   ``'call'``
1344      A function is called (or some other code block entered).  The
1345      global trace function is called; *arg* is ``None``; the return value
1346      specifies the local trace function.
1347
1348   ``'line'``
1349      The interpreter is about to execute a new line of code or re-execute the
1350      condition of a loop.  The local trace function is called; *arg* is
1351      ``None``; the return value specifies the new local trace function.  See
1352      :file:`Objects/lnotab_notes.txt` for a detailed explanation of how this
1353      works.
1354      Per-line events may be disabled for a frame by setting
1355      :attr:`f_trace_lines` to :const:`False` on that frame.
1356
1357   ``'return'``
1358      A function (or other code block) is about to return.  The local trace
1359      function is called; *arg* is the value that will be returned, or ``None``
1360      if the event is caused by an exception being raised.  The trace function's
1361      return value is ignored.
1362
1363   ``'exception'``
1364      An exception has occurred.  The local trace function is called; *arg* is a
1365      tuple ``(exception, value, traceback)``; the return value specifies the
1366      new local trace function.
1367
1368   ``'opcode'``
1369      The interpreter is about to execute a new opcode (see :mod:`dis` for
1370      opcode details).  The local trace function is called; *arg* is
1371      ``None``; the return value specifies the new local trace function.
1372      Per-opcode events are not emitted by default: they must be explicitly
1373      requested by setting :attr:`f_trace_opcodes` to :const:`True` on the
1374      frame.
1375
1376   Note that as an exception is propagated down the chain of callers, an
1377   ``'exception'`` event is generated at each level.
1378
1379   For more fine-grained usage, it's possible to set a trace function by
1380   assigning ``frame.f_trace = tracefunc`` explicitly, rather than relying on
1381   it being set indirectly via the return value from an already installed
1382   trace function. This is also required for activating the trace function on
1383   the current frame, which :func:`settrace` doesn't do. Note that in order
1384   for this to work, a global tracing function must have been installed
1385   with :func:`settrace` in order to enable the runtime tracing machinery,
1386   but it doesn't need to be the same tracing function (e.g. it could be a
1387   low overhead tracing function that simply returns ``None`` to disable
1388   itself immediately on each frame).
1389
1390   For more information on code and frame objects, refer to :ref:`types`.
1391
1392   .. audit-event:: sys.settrace "" sys.settrace
1393
1394   .. impl-detail::
1395
1396      The :func:`settrace` function is intended only for implementing debuggers,
1397      profilers, coverage tools and the like.  Its behavior is part of the
1398      implementation platform, rather than part of the language definition, and
1399      thus may not be available in all Python implementations.
1400
1401   .. versionchanged:: 3.7
1402
1403      ``'opcode'`` event type added; :attr:`f_trace_lines` and
1404      :attr:`f_trace_opcodes` attributes added to frames
1405
1406.. function:: set_asyncgen_hooks(firstiter, finalizer)
1407
1408   Accepts two optional keyword arguments which are callables that accept an
1409   :term:`asynchronous generator iterator` as an argument. The *firstiter*
1410   callable will be called when an asynchronous generator is iterated for the
1411   first time. The *finalizer* will be called when an asynchronous generator
1412   is about to be garbage collected.
1413
1414   .. audit-event:: sys.set_asyncgen_hooks_firstiter "" sys.set_asyncgen_hooks
1415
1416   .. audit-event:: sys.set_asyncgen_hooks_finalizer "" sys.set_asyncgen_hooks
1417
1418   Two auditing events are raised because the underlying API consists of two
1419   calls, each of which must raise its own event.
1420
1421   .. versionadded:: 3.6
1422      See :pep:`525` for more details, and for a reference example of a
1423      *finalizer* method see the implementation of
1424      ``asyncio.Loop.shutdown_asyncgens`` in
1425      :source:`Lib/asyncio/base_events.py`
1426
1427   .. note::
1428      This function has been added on a provisional basis (see :pep:`411`
1429      for details.)
1430
1431.. function:: set_coroutine_origin_tracking_depth(depth)
1432
1433   Allows enabling or disabling coroutine origin tracking. When
1434   enabled, the ``cr_origin`` attribute on coroutine objects will
1435   contain a tuple of (filename, line number, function name) tuples
1436   describing the traceback where the coroutine object was created,
1437   with the most recent call first. When disabled, ``cr_origin`` will
1438   be None.
1439
1440   To enable, pass a *depth* value greater than zero; this sets the
1441   number of frames whose information will be captured. To disable,
1442   pass set *depth* to zero.
1443
1444   This setting is thread-specific.
1445
1446   .. versionadded:: 3.7
1447
1448   .. note::
1449      This function has been added on a provisional basis (see :pep:`411`
1450      for details.)  Use it only for debugging purposes.
1451
1452.. function:: _enablelegacywindowsfsencoding()
1453
1454   Changes the default filesystem encoding and errors mode to 'mbcs' and
1455   'replace' respectively, for consistency with versions of Python prior to 3.6.
1456
1457   This is equivalent to defining the :envvar:`PYTHONLEGACYWINDOWSFSENCODING`
1458   environment variable before launching Python.
1459
1460   .. availability:: Windows.
1461
1462   .. versionadded:: 3.6
1463      See :pep:`529` for more details.
1464
1465.. data:: stdin
1466          stdout
1467          stderr
1468
1469   :term:`File objects <file object>` used by the interpreter for standard
1470   input, output and errors:
1471
1472   * ``stdin`` is used for all interactive input (including calls to
1473     :func:`input`);
1474   * ``stdout`` is used for the output of :func:`print` and :term:`expression`
1475     statements and for the prompts of :func:`input`;
1476   * The interpreter's own prompts and its error messages go to ``stderr``.
1477
1478   These streams are regular :term:`text files <text file>` like those
1479   returned by the :func:`open` function.  Their parameters are chosen as
1480   follows:
1481
1482   * The character encoding is platform-dependent.  Non-Windows
1483     platforms use the locale encoding (see
1484     :meth:`locale.getpreferredencoding()`).
1485
1486     On Windows, UTF-8 is used for the console device.  Non-character
1487     devices such as disk files and pipes use the system locale
1488     encoding (i.e. the ANSI codepage).  Non-console character
1489     devices such as NUL (i.e. where ``isatty()`` returns ``True``) use the
1490     value of the console input and output codepages at startup,
1491     respectively for stdin and stdout/stderr. This defaults to the
1492     system locale encoding if the process is not initially attached
1493     to a console.
1494
1495     The special behaviour of the console can be overridden
1496     by setting the environment variable PYTHONLEGACYWINDOWSSTDIO
1497     before starting Python. In that case, the console codepages are
1498     used as for any other character device.
1499
1500     Under all platforms, you can override the character encoding by
1501     setting the :envvar:`PYTHONIOENCODING` environment variable before
1502     starting Python or by using the new :option:`-X` ``utf8`` command
1503     line option and :envvar:`PYTHONUTF8` environment variable.  However,
1504     for the Windows console, this only applies when
1505     :envvar:`PYTHONLEGACYWINDOWSSTDIO` is also set.
1506
1507   * When interactive, ``stdout`` and ``stderr`` streams are line-buffered.
1508     Otherwise, they are block-buffered like regular text files.  You can
1509     override this value with the :option:`-u` command-line option.
1510
1511   .. note::
1512
1513      To write or read binary data from/to the standard streams, use the
1514      underlying binary :data:`~io.TextIOBase.buffer` object.  For example, to
1515      write bytes to :data:`stdout`, use ``sys.stdout.buffer.write(b'abc')``.
1516
1517      However, if you are writing a library (and do not control in which
1518      context its code will be executed), be aware that the standard streams
1519      may be replaced with file-like objects like :class:`io.StringIO` which
1520      do not support the :attr:`~io.BufferedIOBase.buffer` attribute.
1521
1522
1523.. data:: __stdin__
1524          __stdout__
1525          __stderr__
1526
1527   These objects contain the original values of ``stdin``, ``stderr`` and
1528   ``stdout`` at the start of the program.  They are used during finalization,
1529   and could be useful to print to the actual standard stream no matter if the
1530   ``sys.std*`` object has been redirected.
1531
1532   It can also be used to restore the actual files to known working file objects
1533   in case they have been overwritten with a broken object.  However, the
1534   preferred way to do this is to explicitly save the previous stream before
1535   replacing it, and restore the saved object.
1536
1537   .. note::
1538       Under some conditions ``stdin``, ``stdout`` and ``stderr`` as well as the
1539       original values ``__stdin__``, ``__stdout__`` and ``__stderr__`` can be
1540       ``None``. It is usually the case for Windows GUI apps that aren't connected
1541       to a console and Python apps started with :program:`pythonw`.
1542
1543
1544.. data:: thread_info
1545
1546   A :term:`named tuple` holding information about the thread
1547   implementation.
1548
1549   .. tabularcolumns:: |l|p{0.7\linewidth}|
1550
1551   +------------------+---------------------------------------------------------+
1552   | Attribute        | Explanation                                             |
1553   +==================+=========================================================+
1554   | :const:`name`    | Name of the thread implementation:                      |
1555   |                  |                                                         |
1556   |                  |  * ``'nt'``: Windows threads                            |
1557   |                  |  * ``'pthread'``: POSIX threads                         |
1558   |                  |  * ``'solaris'``: Solaris threads                       |
1559   +------------------+---------------------------------------------------------+
1560   | :const:`lock`    | Name of the lock implementation:                        |
1561   |                  |                                                         |
1562   |                  |  * ``'semaphore'``: a lock uses a semaphore             |
1563   |                  |  * ``'mutex+cond'``: a lock uses a mutex                |
1564   |                  |    and a condition variable                             |
1565   |                  |  * ``None`` if this information is unknown              |
1566   +------------------+---------------------------------------------------------+
1567   | :const:`version` | Name and version of the thread library. It is a string, |
1568   |                  | or ``None`` if this information is unknown.             |
1569   +------------------+---------------------------------------------------------+
1570
1571   .. versionadded:: 3.3
1572
1573
1574.. data:: tracebacklimit
1575
1576   When this variable is set to an integer value, it determines the maximum number
1577   of levels of traceback information printed when an unhandled exception occurs.
1578   The default is ``1000``.  When set to ``0`` or less, all traceback information
1579   is suppressed and only the exception type and value are printed.
1580
1581
1582.. function:: unraisablehook(unraisable, /)
1583
1584   Handle an unraisable exception.
1585
1586   Called when an exception has occurred but there is no way for Python to
1587   handle it. For example, when a destructor raises an exception or during
1588   garbage collection (:func:`gc.collect`).
1589
1590   The *unraisable* argument has the following attributes:
1591
1592   * *exc_type*: Exception type.
1593   * *exc_value*: Exception value, can be ``None``.
1594   * *exc_traceback*: Exception traceback, can be ``None``.
1595   * *err_msg*: Error message, can be ``None``.
1596   * *object*: Object causing the exception, can be ``None``.
1597
1598   The default hook formats *err_msg* and *object* as:
1599   ``f'{err_msg}: {object!r}'``; use "Exception ignored in" error message
1600   if *err_msg* is ``None``.
1601
1602   :func:`sys.unraisablehook` can be overridden to control how unraisable
1603   exceptions are handled.
1604
1605   Storing *exc_value* using a custom hook can create a reference cycle. It
1606   should be cleared explicitly to break the reference cycle when the
1607   exception is no longer needed.
1608
1609   Storing *object* using a custom hook can resurrect it if it is set to an
1610   object which is being finalized. Avoid storing *object* after the custom
1611   hook completes to avoid resurrecting objects.
1612
1613   See also :func:`excepthook` which handles uncaught exceptions.
1614
1615   .. audit-event:: sys.unraisablehook hook,unraisable sys.unraisablehook
1616
1617      Raise an auditing event ``sys.unraisablehook`` with arguments
1618      ``hook``, ``unraisable`` when an exception that cannot be handled occurs.
1619      The ``unraisable`` object is the same as what will be passed to the hook.
1620      If no hook has been set, ``hook`` may be ``None``.
1621
1622   .. versionadded:: 3.8
1623
1624.. data:: version
1625
1626   A string containing the version number of the Python interpreter plus additional
1627   information on the build number and compiler used.  This string is displayed
1628   when the interactive interpreter is started.  Do not extract version information
1629   out of it, rather, use :data:`version_info` and the functions provided by the
1630   :mod:`platform` module.
1631
1632
1633.. data:: api_version
1634
1635   The C API version for this interpreter.  Programmers may find this useful when
1636   debugging version conflicts between Python and extension modules.
1637
1638
1639.. data:: version_info
1640
1641   A tuple containing the five components of the version number: *major*, *minor*,
1642   *micro*, *releaselevel*, and *serial*.  All values except *releaselevel* are
1643   integers; the release level is ``'alpha'``, ``'beta'``, ``'candidate'``, or
1644   ``'final'``.  The ``version_info`` value corresponding to the Python version 2.0
1645   is ``(2, 0, 0, 'final', 0)``.  The components can also be accessed by name,
1646   so ``sys.version_info[0]`` is equivalent to ``sys.version_info.major``
1647   and so on.
1648
1649   .. versionchanged:: 3.1
1650      Added named component attributes.
1651
1652.. data:: warnoptions
1653
1654   This is an implementation detail of the warnings framework; do not modify this
1655   value.  Refer to the :mod:`warnings` module for more information on the warnings
1656   framework.
1657
1658
1659.. data:: winver
1660
1661   The version number used to form registry keys on Windows platforms. This is
1662   stored as string resource 1000 in the Python DLL.  The value is normally the
1663   first three characters of :const:`version`.  It is provided in the :mod:`sys`
1664   module for informational purposes; modifying this value has no effect on the
1665   registry keys used by Python.
1666
1667   .. availability:: Windows.
1668
1669
1670.. data:: _xoptions
1671
1672   A dictionary of the various implementation-specific flags passed through
1673   the :option:`-X` command-line option.  Option names are either mapped to
1674   their values, if given explicitly, or to :const:`True`.  Example:
1675
1676   .. code-block:: shell-session
1677
1678      $ ./python -Xa=b -Xc
1679      Python 3.2a3+ (py3k, Oct 16 2010, 20:14:50)
1680      [GCC 4.4.3] on linux2
1681      Type "help", "copyright", "credits" or "license" for more information.
1682      >>> import sys
1683      >>> sys._xoptions
1684      {'a': 'b', 'c': True}
1685
1686   .. impl-detail::
1687
1688      This is a CPython-specific way of accessing options passed through
1689      :option:`-X`.  Other implementations may export them through other
1690      means, or not at all.
1691
1692   .. versionadded:: 3.2
1693
1694
1695.. rubric:: Citations
1696
1697.. [C99] ISO/IEC 9899:1999.  "Programming languages -- C."  A public draft of this standard is available at http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf\ .
1698