\chapter{Top-level components\label{top-level}}

The Python interpreter can get its input from a number of sources:
from a script passed to it as standard input or as program argument,
typed in interactively, from a module source file, etc.  This chapter
gives the syntax used in these cases.
\index{interpreter}


\section{Complete Python programs\label{programs}}
\index{program}

While a language specification need not prescribe how the language
interpreter is invoked, it is useful to have a notion of a complete
Python program.  A complete Python program is executed in a minimally
initialized environment: all built-in and standard modules are
available, but none have been initialized, except for \module{sys}
(various system services), \module{__builtin__} (built-in functions,
exceptions and \code{None}) and \module{__main__}.  The latter is used
to provide the local and global namespace for execution of the
complete program.
\refbimodindex{sys}
\refbimodindex{__main__}
\refbimodindex{__builtin__}

The syntax for a complete Python program is that for file input,
described in the next section.

The interpreter may also be invoked in interactive mode; in this case,
it does not read and execute a complete program but reads and executes
one statement (possibly compound) at a time.  The initial environment
is identical to that of a complete program; each statement is executed
in the namespace of \module{__main__}.
\index{interactive mode}
\refbimodindex{__main__}

Under {\UNIX}, a complete program can be passed to the interpreter in
three forms: with the \programopt{-c} \var{string} command line option, as a
file passed as the first command line argument, or as standard input.
If the file or standard input is a tty device, the interpreter enters
interactive mode; otherwise, it executes the file as a complete
program.
\index{UNIX}
\index{command line}
\index{standard input}


\section{File input\label{file-input}}

All input read from non-interactive files has the same form:

\begin{productionlist}
  \production{file_input}
             {(NEWLINE | \token{statement})*}
\end{productionlist}

This syntax is used in the following situations:

\begin{itemize}

\item when parsing a complete Python program (from a file or from a string);

\item when parsing a module;

\item when parsing a string passed to the \keyword{exec} statement;

\end{itemize}


\section{Interactive input\label{interactive}}

Input in interactive mode is parsed using the following grammar:

\begin{productionlist}
  \production{interactive_input}
             {[\token{stmt_list}] NEWLINE | \token{compound_stmt} NEWLINE}
\end{productionlist}

Note that a (top-level) compound statement must be followed by a blank
line in interactive mode; this is needed to help the parser detect the
end of the input.


\section{Expression input\label{expression-input}}
\index{input}

There are two forms of expression input.  Both ignore leading
whitespace.
The string argument to \function{eval()} must have the following form:
\bifuncindex{eval}

\begin{productionlist}
  \production{eval_input}
             {\token{expression_list} NEWLINE*}
\end{productionlist}

The input line read by \function{input()} must have the following form:
\bifuncindex{input}

\begin{productionlist}
  \production{input_input}
             {\token{expression_list} NEWLINE}
\end{productionlist}

Note: to read `raw' input line without interpretation, you can use the
built-in function \function{raw_input()} or the \method{readline()} method
of file objects.
\obindex{file}
\index{input!raw}
\index{raw input}
\bifuncindex{raw_input}
\withsubitem{(file method)}{\ttindex{readline()}}
