\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}{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}{setcheckinterval}{interval}
Set the interpreter's ``check interval''.  This integer value
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
it to a larger 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{funcdesc}

\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}
