\section{Built-in Module \sectcode{sys}}

\bimodindex{sys}
This module provides access to some variables used or maintained by the
interpreter and to functions that interact strongly with the interpreter.
It is always available.

\renewcommand{\indexsubitem}{(in module sys)}
\begin{datadesc}{argv}
  The list of command line arguments passed to a Python script.
  \code{sys.argv[0]} is the script name.
  If no script name was passed to the Python interpreter,
  \code{sys.argv} is empty.
\end{datadesc}

\begin{datadesc}{builtin_module_names}
  A list of strings giving the names of all modules that are compiled
  into this Python interpreter.  (This information is not available in
  any other way --- \code{sys.modules.keys()} only lists the imported
  modules.)
\end{datadesc}

\begin{datadesc}{check_interval}
When this variable is set to an integer value, it determines how often
the interpreter checks for periodic things such as thread switches and
signal handlers.  The default is 10, meaning the check is performed
every 10 Python virtual instructions.  Setting this to a large value
may increase performance for programs using threads.  Setting it to a
value <= 0 checks every virtual instruction, maximizing responsiveness
as well as overhead.
\end{datadesc}

\begin{datadesc}{exc_type}
\dataline{exc_value}
\dataline{exc_traceback}
  These three variables are not always defined; they are set when an
  exception handler (an \code{except} clause of a \code{try} statement) is
  invoked.  Their meaning is: \code{exc_type} gets the exception type of
  the exception being handled; \code{exc_value} gets the exception
  parameter (its \dfn{associated value} or the second argument to
  \code{raise}); \code{exc_traceback} gets a traceback object which
  encapsulates the call stack at the point where the exception
  originally occurred.
\end{datadesc}

\begin{funcdesc}{exit}{n}
  Exit from Python with numeric exit status \var{n}.  This is
  implemented by raising the \code{SystemExit} exception, so cleanup
  actions specified by \code{finally} clauses of \code{try} statements
  are honored, and it is possible to catch the exit attempt at an outer
  level.
\end{funcdesc}

\begin{datadesc}{exitfunc}
  This value is not actually defined by the module, but can be set by
  the user (or by a program) to specify a clean-up action at program
  exit.  When set, it should be a parameterless function.  This function
  will be called when the interpreter exits in any way (but not when a
  fatal error occurs: in that case the interpreter's internal state
  cannot be trusted).
\end{datadesc}

\begin{datadesc}{last_type}
\dataline{last_value}
\dataline{last_traceback}
  These three variables are not always defined; they are set when an
  exception is not handled and the interpreter prints an error message
  and a stack traceback.  Their intended use is to allow an interactive
  user to import a debugger module and engage in post-mortem debugging
  without having to re-execute the command that caused the error (which
  may be hard to reproduce).  The meaning of the variables is the same
  as that of \code{exc_type}, \code{exc_value} and \code{exc_tracaback},
  respectively.
\end{datadesc}

\begin{datadesc}{modules}
  Gives the list of modules that have already been loaded.
  This can be manipulated to force reloading of modules and other tricks.
\end{datadesc}

\begin{datadesc}{path}
  A list of strings that specifies the search path for modules.
  Initialized from the environment variable \code{PYTHONPATH}, or an
  installation-dependent default.
\end{datadesc}

\begin{datadesc}{ps1}
\dataline{ps2}
  Strings specifying the primary and secondary prompt of the
  interpreter.  These are only defined if the interpreter is in
  interactive mode.  Their initial values in this case are
  \code{'>>> '} and \code{'... '}.
\end{datadesc}

\begin{funcdesc}{settrace}{tracefunc}
  Set the system's trace function, which allows you to implement a
  Python source code debugger in Python.  The standard modules
  \code{pdb} and \code{wdb} are such debuggers; the difference is that
  \code{wdb} uses windows and needs STDWIN, while \code{pdb} has a
  line-oriented interface not unlike dbx.  See the file \file{pdb.doc}
  in the Python library source directory for more documentation (both
  about \code{pdb} and \code{sys.trace}).
\end{funcdesc}
\ttindex{pdb}
\ttindex{wdb}
\index{trace function}

\begin{funcdesc}{setprofile}{profilefunc}
  Set the system's profile function, which allows you to implement a
  Python source code profiler in Python.  The system's profile function
  is called similarly to the system's trace function (see
  \code{sys.settrace}), but it isn't called for each executed line of
  code (only on call and return and when an exception occurs).  Also,
  its return value is not used, so it can just return \code{None}.
\end{funcdesc}
\index{profile function}

\begin{datadesc}{stdin}
\dataline{stdout}
\dataline{stderr}
  File objects corresponding to the interpreter's standard input,
  output and error streams.  \code{sys.stdin} is used for all
  interpreter input except for scripts but including calls to
  \code{input()} and \code{raw_input()}.  \code{sys.stdout} is used
  for the output of \code{print} and expression statements and for the
  prompts of \code{input()} and \code{raw_input()}.  The interpreter's
  own prompts and (almost all of) its error messages go to
  \code{sys.stderr}.  \code{sys.stdout} and \code{sys.stderr} needn't
  be built-in file objects: any object is acceptable as long as it has
  a \code{write} method that takes a string argument.
\end{datadesc}

\begin{datadesc}{tracebacklimit}
When this variable is set to an integer value, it determines the
maximum number of levels of traceback information printed when an
unhandled exception occurs.  The default is 1000.  When set to 0 or
less, all traceback information is suppressed and only the exception
type and value are printed.
\end{datadesc}
