blob: 54d924f3b170b6d5825cba31c5e2c21a3d258a46 [file] [log] [blame]
Fred Drake295da241998-08-10 19:42:37 +00001\section{\module{cmd} ---
Fred Drakef8ca7d82000-10-10 17:03:45 +00002 Support for line-oriented command interpreters}
3
Fred Drakeb91e9341998-07-23 17:59:49 +00004\declaremodule{standard}{cmd}
Fred Drake295da241998-08-10 19:42:37 +00005\sectionauthor{Eric S. Raymond}{esr@snark.thyrsus.com}
Fred Drakef8ca7d82000-10-10 17:03:45 +00006\modulesynopsis{Build line-oriented command interpreters.}
Fred Drakeb91e9341998-07-23 17:59:49 +00007
Guido van Rossum8668e8e1998-06-28 17:55:53 +00008
Fred Drake579d3661998-07-02 19:35:12 +00009The \class{Cmd} class provides a simple framework for writing
Guido van Rossum8668e8e1998-06-28 17:55:53 +000010line-oriented command interpreters. These are often useful for
11test harnesses, administrative tools, and prototypes that will
12later be wrapped in a more sophisticated interface.
13
14\begin{classdesc}{Cmd}{}
15A \class{Cmd} instance or subclass instance is a line-oriented
Fred Drake579d3661998-07-02 19:35:12 +000016interpreter framework. There is no good reason to instantiate
17\class{Cmd} itself; rather, it's useful as a superclass of an
18interpreter class you define yourself in order to inherit
19\class{Cmd}'s methods and encapsulate action methods.
Guido van Rossum8668e8e1998-06-28 17:55:53 +000020\end{classdesc}
21
22\subsection{Cmd Objects}
23\label{Cmd-objects}
24
25A \class{Cmd} instance has the following methods:
26
Fred Drake579d3661998-07-02 19:35:12 +000027\begin{methoddesc}{cmdloop}{\optional{intro}}
Guido van Rossum8668e8e1998-06-28 17:55:53 +000028Repeatedly issue a prompt, accept input, parse an initial prefix off
29the received input, and dispatch to action methods, passing them the
30remainder of the line as argument.
31
32The optional argument is a banner or intro string to be issued before the
33first prompt (this overrides the \member{intro} class member).
34
35If the \module{readline} module is loaded, input will automatically
Fred Drake579d3661998-07-02 19:35:12 +000036inherit \program{bash}-like history-list editing (e.g. \kbd{Ctrl-P}
37scrolls back to the last command, \kbd{Ctrl-N} forward to the next
38one, \kbd{Ctrl-F} moves the cursor to the right non-destructively,
39\kbd{Ctrl-B} moves the cursor to the left non-destructively, etc.).
Guido van Rossum8668e8e1998-06-28 17:55:53 +000040
Fred Drake579d3661998-07-02 19:35:12 +000041An end-of-file on input is passed back as the string \code{'EOF'}.
Guido van Rossum8668e8e1998-06-28 17:55:53 +000042
Fred Drake579d3661998-07-02 19:35:12 +000043An interpreter instance will recognize a command name \samp{foo} if
44and only if it has a method \method{do_foo()}. As a special case,
Eric S. Raymond7ae3a5e2000-07-12 02:56:15 +000045a line beginning with the character \character{?} is dispatched to
Fred Drake579d3661998-07-02 19:35:12 +000046the method \method{do_help()}. As another special case, a line
Eric S. Raymond7ae3a5e2000-07-12 02:56:15 +000047beginning with the character \character{!} is dispatched to the
Fred Drake579d3661998-07-02 19:35:12 +000048method \method{do_shell} (if such a method is defined).
Guido van Rossum8668e8e1998-06-28 17:55:53 +000049
50All subclasses of \class{Cmd} inherit a predefined \method{do_help}.
51This method, called with an argument \code{bar}, invokes the
Fred Drake579d3661998-07-02 19:35:12 +000052corresponding method \method{help_bar()}. With no argument,
53\method{do_help()} lists all available help topics (that is, all
54commands with corresponding \method{help_*()} methods), and also lists
55any undocumented commands.
Guido van Rossum8668e8e1998-06-28 17:55:53 +000056\end{methoddesc}
57
58\begin{methoddesc}{onecmd}{str}
59Interpret the argument as though it had been typed in in
60response to the prompt.
61\end{methoddesc}
62
63\begin{methoddesc}{emptyline}{}
64Method called when an empty line is entered in response to the prompt.
65If this method is not overridden, it repeats the last nonempty command
66entered.
67\end{methoddesc}
68
69\begin{methoddesc}{default}{line}
70Method called on an input line when the command prefix is not
71recognized. If this method is not overridden, it prints an
72error message and returns.
73\end{methoddesc}
74
Fred Drake579d3661998-07-02 19:35:12 +000075\begin{methoddesc}{precmd}{}
Eric S. Raymondff00fda2001-06-23 14:42:43 +000076Hook method executed just before the command line is interpreted, but
77after the input prompt is generated and issued. This
Fred Drake579d3661998-07-02 19:35:12 +000078method is a stub in \class{Cmd}; it exists to be overridden by
79subclasses.
Guido van Rossum8668e8e1998-06-28 17:55:53 +000080\end{methoddesc}
81
Fred Drake579d3661998-07-02 19:35:12 +000082\begin{methoddesc}{postcmd}{}
Guido van Rossum8668e8e1998-06-28 17:55:53 +000083Hook method executed just after a command dispatch is finished. This
84method is a stub in \class{Cmd}; it exists to be overridden by
85subclasses.
86\end{methoddesc}
87
Fred Drake579d3661998-07-02 19:35:12 +000088\begin{methoddesc}{preloop}{}
89Hook method executed once when \method{cmdloop()} is called. This
90method is a stub in \class{Cmd}; it exists to be overridden by
91subclasses.
Guido van Rossum8668e8e1998-06-28 17:55:53 +000092\end{methoddesc}
93
Fred Drake579d3661998-07-02 19:35:12 +000094\begin{methoddesc}{postloop}{}
95Hook method executed once when \method{cmdloop()} is about to return.
96This method is a stub in \class{Cmd}; it exists to be overridden by
Guido van Rossum8668e8e1998-06-28 17:55:53 +000097subclasses.
98\end{methoddesc}
99
100Instances of \class{Cmd} subclasses have some public instance variables:
101
102\begin{memberdesc}{prompt}
103The prompt issued to solicit input.
104\end{memberdesc}
105
106\begin{memberdesc}{identchars}
107The string of characters accepted for the command prefix.
108\end{memberdesc}
109
110\begin{memberdesc}{lastcmd}
111The last nonempty command prefix seen.
112\end{memberdesc}
113
114\begin{memberdesc}{intro}
115A string to issue as an intro or banner. May be overridden by giving
116the \method{cmdloop()} method an argument.
117\end{memberdesc}
118
119\begin{memberdesc}{doc_header}
Fred Drake579d3661998-07-02 19:35:12 +0000120The header to issue if the help output has a section for documented
121commands.
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000122\end{memberdesc}
123
124\begin{memberdesc}{misc_header}
Fred Drake579d3661998-07-02 19:35:12 +0000125The header to issue if the help output has a section for miscellaneous
126help topics (that is, there are \method{help_*()} methods without
127corresponding \method{do_*()} methods).
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000128\end{memberdesc}
129
130\begin{memberdesc}{undoc_header}
131The header to issue if the help output has a section for undocumented
Fred Drake579d3661998-07-02 19:35:12 +0000132commands (that is, there are \method{do_*()} methods without
133corresponding \method{help_*()} methods).
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000134\end{memberdesc}
135
136\begin{memberdesc}{ruler}
137The character used to draw separator lines under the help-message
Fred Drake579d3661998-07-02 19:35:12 +0000138headers. If empty, no ruler line is drawn. It defaults to
139\character{=}.
Guido van Rossum8668e8e1998-06-28 17:55:53 +0000140\end{memberdesc}
141
Guido van Rossumc8da0f92001-03-24 19:17:35 +0000142\begin{memberdesc}{use_rawinput}
143A flag, defaulting to true. If true, \method{cmdloop()} uses
144\function{raw_input()} to display a prompt and read the next command;
145if false, \function{sys.stdout.write()} and
Eric S. Raymondff00fda2001-06-23 14:42:43 +0000146\function{sys.stdin.readline()} are used. (This means that by
147importing \module{readline}, on systems that support it, the
148interpreter will automatically support Emacs-like line editing
149and command-history keystrokes.)
Guido van Rossumc8da0f92001-03-24 19:17:35 +0000150\end{memberdesc}