\section{\module{linecache} ---
         Random access to text lines}

\declaremodule{standard}{linecache}
\sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il}
\modulesynopsis{This module provides random access to individual lines
                from text files.}


The \module{linecache} module allows one to get any line from any file,
while attempting to optimize internally, using a cache, the common case
where many lines are read from a single file.  This is used by the
\refmodule{traceback} module to retrieve source lines for inclusion in 
the formatted traceback.

The \module{linecache} module defines the following functions:

\begin{funcdesc}{getline}{filename, lineno}
Get line \var{lineno} from file named \var{filename}. This function
will never throw an exception --- it will return \code{''} on errors
(the terminating newline character will be included for lines that are
found).

If a file named \var{filename} is not found, the function will look
for it in the module\indexiii{module}{search}{path} search path,
\code{sys.path}.
\end{funcdesc}

\begin{funcdesc}{clearcache}{}
Clear the cache.  Use this function if you no longer need lines from
files previously read using \function{getline()}.
\end{funcdesc}

\begin{funcdesc}{checkcache}{\optional{filename}}
Check the cache for validity.  Use this function if files in the cache 
may have changed on disk, and you require the updated version.  If
\var{filename} is omitted, it will check the whole cache entries.
\end{funcdesc}

Example:

\begin{verbatim}
>>> import linecache
>>> linecache.getline('/etc/passwd', 4)
'sys:x:3:3:sys:/dev:/bin/sh\n'
\end{verbatim}
