blob: 716db6741a69d08264d927f05ce9a5627db99d39 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001
2:mod:`cmd` --- Support for line-oriented command interpreters
3=============================================================
4
5.. module:: cmd
6 :synopsis: Build line-oriented command interpreters.
7.. sectionauthor:: Eric S. Raymond <esr@snark.thyrsus.com>
8
9
10The :class:`Cmd` class provides a simple framework for writing line-oriented
11command interpreters. These are often useful for test harnesses, administrative
12tools, and prototypes that will later be wrapped in a more sophisticated
13interface.
14
15
16.. class:: Cmd([completekey[, stdin[, stdout]]])
17
18 A :class:`Cmd` instance or subclass instance is a line-oriented interpreter
19 framework. There is no good reason to instantiate :class:`Cmd` itself; rather,
20 it's useful as a superclass of an interpreter class you define yourself in order
21 to inherit :class:`Cmd`'s methods and encapsulate action methods.
22
23 The optional argument *completekey* is the :mod:`readline` name of a completion
24 key; it defaults to :kbd:`Tab`. If *completekey* is not :const:`None` and
25 :mod:`readline` is available, command completion is done automatically.
26
27 The optional arguments *stdin* and *stdout* specify the input and output file
28 objects that the Cmd instance or subclass instance will use for input and
29 output. If not specified, they will default to *sys.stdin* and *sys.stdout*.
30
Georg Brandl116aa622007-08-15 14:28:22 +000031
32.. _cmd-objects:
33
34Cmd Objects
35-----------
36
37A :class:`Cmd` instance has the following methods:
38
39
40.. method:: Cmd.cmdloop([intro])
41
42 Repeatedly issue a prompt, accept input, parse an initial prefix off the
43 received input, and dispatch to action methods, passing them the remainder of
44 the line as argument.
45
46 The optional argument is a banner or intro string to be issued before the first
47 prompt (this overrides the :attr:`intro` class member).
48
49 If the :mod:`readline` module is loaded, input will automatically inherit
50 :program:`bash`\ -like history-list editing (e.g. :kbd:`Control-P` scrolls back
51 to the last command, :kbd:`Control-N` forward to the next one, :kbd:`Control-F`
52 moves the cursor to the right non-destructively, :kbd:`Control-B` moves the
53 cursor to the left non-destructively, etc.).
54
55 An end-of-file on input is passed back as the string ``'EOF'``.
56
57 An interpreter instance will recognize a command name ``foo`` if and only if it
58 has a method :meth:`do_foo`. As a special case, a line beginning with the
59 character ``'?'`` is dispatched to the method :meth:`do_help`. As another
60 special case, a line beginning with the character ``'!'`` is dispatched to the
61 method :meth:`do_shell` (if such a method is defined).
62
63 This method will return when the :meth:`postcmd` method returns a true value.
64 The *stop* argument to :meth:`postcmd` is the return value from the command's
65 corresponding :meth:`do_\*` method.
66
67 If completion is enabled, completing commands will be done automatically, and
68 completing of commands args is done by calling :meth:`complete_foo` with
69 arguments *text*, *line*, *begidx*, and *endidx*. *text* is the string prefix
70 we are attempting to match: all returned matches must begin with it. *line* is
71 the current input line with leading whitespace removed, *begidx* and *endidx*
72 are the beginning and ending indexes of the prefix text, which could be used to
73 provide different completion depending upon which position the argument is in.
74
75 All subclasses of :class:`Cmd` inherit a predefined :meth:`do_help`. This
76 method, called with an argument ``'bar'``, invokes the corresponding method
77 :meth:`help_bar`. With no argument, :meth:`do_help` lists all available help
78 topics (that is, all commands with corresponding :meth:`help_\*` methods), and
79 also lists any undocumented commands.
80
81
82.. method:: Cmd.onecmd(str)
83
84 Interpret the argument as though it had been typed in response to the prompt.
85 This may be overridden, but should not normally need to be; see the
86 :meth:`precmd` and :meth:`postcmd` methods for useful execution hooks. The
87 return value is a flag indicating whether interpretation of commands by the
88 interpreter should stop. If there is a :meth:`do_\*` method for the command
89 *str*, the return value of that method is returned, otherwise the return value
90 from the :meth:`default` method is returned.
91
92
93.. method:: Cmd.emptyline()
94
95 Method called when an empty line is entered in response to the prompt. If this
96 method is not overridden, it repeats the last nonempty command entered.
97
98
99.. method:: Cmd.default(line)
100
101 Method called on an input line when the command prefix is not recognized. If
102 this method is not overridden, it prints an error message and returns.
103
104
105.. method:: Cmd.completedefault(text, line, begidx, endidx)
106
107 Method called to complete an input line when no command-specific
108 :meth:`complete_\*` method is available. By default, it returns an empty list.
109
110
111.. method:: Cmd.precmd(line)
112
113 Hook method executed just before the command line *line* is interpreted, but
114 after the input prompt is generated and issued. This method is a stub in
115 :class:`Cmd`; it exists to be overridden by subclasses. The return value is
116 used as the command which will be executed by the :meth:`onecmd` method; the
117 :meth:`precmd` implementation may re-write the command or simply return *line*
118 unchanged.
119
120
121.. method:: Cmd.postcmd(stop, line)
122
123 Hook method executed just after a command dispatch is finished. This method is
124 a stub in :class:`Cmd`; it exists to be overridden by subclasses. *line* is the
125 command line which was executed, and *stop* is a flag which indicates whether
126 execution will be terminated after the call to :meth:`postcmd`; this will be the
127 return value of the :meth:`onecmd` method. The return value of this method will
128 be used as the new value for the internal flag which corresponds to *stop*;
129 returning false will cause interpretation to continue.
130
131
132.. method:: Cmd.preloop()
133
134 Hook method executed once when :meth:`cmdloop` is called. This method is a stub
135 in :class:`Cmd`; it exists to be overridden by subclasses.
136
137
138.. method:: Cmd.postloop()
139
140 Hook method executed once when :meth:`cmdloop` is about to return. This method
141 is a stub in :class:`Cmd`; it exists to be overridden by subclasses.
142
143Instances of :class:`Cmd` subclasses have some public instance variables:
144
145
146.. attribute:: Cmd.prompt
147
148 The prompt issued to solicit input.
149
150
151.. attribute:: Cmd.identchars
152
153 The string of characters accepted for the command prefix.
154
155
156.. attribute:: Cmd.lastcmd
157
158 The last nonempty command prefix seen.
159
160
161.. attribute:: Cmd.intro
162
163 A string to issue as an intro or banner. May be overridden by giving the
164 :meth:`cmdloop` method an argument.
165
166
167.. attribute:: Cmd.doc_header
168
169 The header to issue if the help output has a section for documented commands.
170
171
172.. attribute:: Cmd.misc_header
173
174 The header to issue if the help output has a section for miscellaneous help
175 topics (that is, there are :meth:`help_\*` methods without corresponding
176 :meth:`do_\*` methods).
177
178
179.. attribute:: Cmd.undoc_header
180
181 The header to issue if the help output has a section for undocumented commands
182 (that is, there are :meth:`do_\*` methods without corresponding :meth:`help_\*`
183 methods).
184
185
186.. attribute:: Cmd.ruler
187
188 The character used to draw separator lines under the help-message headers. If
189 empty, no ruler line is drawn. It defaults to ``'='``.
190
191
192.. attribute:: Cmd.use_rawinput
193
194 A flag, defaulting to true. If true, :meth:`cmdloop` uses :func:`input` to
195 display a prompt and read the next command; if false, :meth:`sys.stdout.write`
196 and :meth:`sys.stdin.readline` are used. (This means that by importing
197 :mod:`readline`, on systems that support it, the interpreter will automatically
198 support :program:`Emacs`\ -like line editing and command-history keystrokes.)
199