Mercurial > python-cmd2
annotate docs/freefeatures.rst @ 345:6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
author | catherine@Drou |
---|---|
date | Tue, 16 Feb 2010 15:13:11 -0500 |
parents | 49bea7cab179 |
children | 49dd1ce6cfd6 |
rev | line source |
---|---|
314 | 1 =================================== |
2 Features requiring no modifications | |
3 =================================== | |
4 | |
5 These features are provided "for free" to a cmd_-based application | |
6 simply by replacing ``import cmd`` with ``import cmd2 as cmd``. | |
7 | |
315 | 8 Script files |
9 ============ | |
10 | |
331 | 11 Text files can serve as scripts for your ``cmd2``-based |
12 application, with the ``load``, ``save``, and ``edit`` | |
13 commands. | |
315 | 14 |
15 .. automethod:: cmd2.Cmd.do_load | |
16 | |
325
4172feeddf76
want to incorporate run() for tests - not yet working
catherine@dellzilla
parents:
324
diff
changeset
|
17 .. automethod:: cmd2.Cmd.do_save |
4172feeddf76
want to incorporate run() for tests - not yet working
catherine@dellzilla
parents:
324
diff
changeset
|
18 |
331 | 19 .. automethod:: cmd2.Cmd.do_edit |
20 | |
345
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
21 Comments |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
22 ======== |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
23 |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
24 Comments are omitted from the argument list |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
25 before it is passed to a ``do_`` method. By |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
26 default, both Python-style and C-style comments |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
27 are recognized; you may change this by overriding |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
28 ``app.commentGrammars`` with a different pyparsing_ |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
29 grammar. |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
30 |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
31 Comments can be useful in :ref:`script`s. Used |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
32 in an interactive session, they may indicate |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
33 mental imbalance. |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
34 |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
35 :: |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
36 |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
37 def do_speak(self, arg): |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
38 self.stdout.write(arg + '\n') |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
39 |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
40 :: |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
41 |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
42 (Cmd) speak it was /* not */ delicious! # Yuck! |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
43 it was delicious! |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
44 |
315 | 45 Output redirection |
46 ================== | |
47 | |
324 | 48 As in a Unix shell, output of a command can be redirected: |
49 | |
50 - sent to a file with ``>``, as in ``mycommand args > filename.txt`` | |
51 - piped (``|``) as input to operating-system commands, as in | |
52 ``mycommand args | wc`` | |
53 - sent to the paste buffer, ready for the next Copy operation, by | |
54 ending with a bare ``>``, as in ``mycommand args >``.. Redirecting | |
55 to paste buffer requires software to be installed on the operating | |
56 system, pywin32_ on Windows or xclip_ on *nix. | |
57 | |
58 .. _pywin32:: http://sourceforge.net/projects/pywin32/ | |
59 .. _xclip:: http://www.cyberciti.biz/faq/xclip-linux-insert-files-command-output-intoclipboard/ | |
60 | |
325
4172feeddf76
want to incorporate run() for tests - not yet working
catherine@dellzilla
parents:
324
diff
changeset
|
61 Commands at invocation |
4172feeddf76
want to incorporate run() for tests - not yet working
catherine@dellzilla
parents:
324
diff
changeset
|
62 ====================== |
324 | 63 |
328 | 64 You can send commands to your app as you invoke it by |
65 including them as extra arguments to the program. | |
66 ``cmd2`` interprets each argument as a separate | |
67 command, so you should enclose each command in | |
68 quotation marks if it is more than a one-word command. | |
69 | |
70 :: | |
71 | |
72 cat@eee:~/proj/cmd2/example$ python example.py "say hello" "say Gracie" quit | |
73 hello | |
74 Gracie | |
75 cat@eee:~/proj/cmd2/example$ | |
315 | 76 |
77 Python | |
78 ====== | |
79 | |
328 | 80 :: |
81 | |
82 The ``py`` command will run its arguments as a Python | |
83 command. Entered without arguments, it enters an | |
84 interactive Python session. That session can call | |
85 "back" to your application with ``cmd("")``. Through | |
86 ``self``, it also has access to your application | |
87 instance itself. (If that thought terrifies you, | |
88 you can set the ``locals_in_py`` parameter to ``False``. | |
89 See see :ref:`parameters`) | |
90 | |
91 :: | |
92 | |
93 (Cmd) py print("-".join("spelling")) | |
94 s-p-e-l-l-i-n-g | |
95 (Cmd) py | |
96 Python 2.6.4 (r264:75706, Dec 7 2009, 18:45:15) | |
97 [GCC 4.4.1] on linux2 | |
98 Type "help", "copyright", "credits" or "license" for more information. | |
99 (CmdLineApp) | |
100 | |
101 py <command>: Executes a Python command. | |
102 py: Enters interactive Python mode. | |
103 End with `Ctrl-D` (Unix) / `Ctrl-Z` (Windows), `quit()`, 'exit()`. | |
104 Non-python commands can be issued with `cmd("your command")`. | |
105 | |
106 >>> import os | |
107 >>> os.uname() | |
108 ('Linux', 'eee', '2.6.31-19-generic', '#56-Ubuntu SMP Thu Jan 28 01:26:53 UTC 2010', 'i686') | |
109 >>> cmd("say --piglatin {os}".format(os=os.uname()[0])) | |
110 inuxLay | |
111 >>> self.prompt | |
112 '(Cmd) ' | |
113 >>> self.prompt = 'Python was here > ' | |
114 >>> quit() | |
115 Python was here > | |
116 | |
314 | 117 Searchable command history |
118 ========================== | |
119 | |
120 All cmd_-based applications have access to previous commands with | |
121 the up- and down- cursor keys. | |
122 | |
123 All cmd_-based applications on systems with the ``readline`` module | |
124 also provide `bash-like history list editing`_. | |
125 | |
126 .. _`bash-like history list editing`: http://www.talug.org/events/20030709/cmdline_history.html | |
127 | |
128 ``cmd2`` makes a third type of history access available, consisting of these commands: | |
129 | |
130 .. automethod:: cmd2.Cmd.do_history | |
131 | |
329 | 132 .. automethod:: cmd2.Cmd.do_list |
133 | |
134 .. automethod:: cmd2.Cmd.do_run | |
135 | |
136 Quitting the application | |
137 ======================== | |
138 | |
139 ``cmd2`` pre-defines a ``quit`` command for you (with | |
140 synonyms ``exit`` and simply ``q``). | |
141 It's trivial, but it's one less thing for you to remember. | |
142 | |
331 | 143 |
345
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
144 Abbreviated commands |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
145 ==================== |
331 | 146 |
345
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
147 ``cmd2`` apps will accept shortened command names |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
148 so long as there is no ambiguity. Thus, if |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
149 ``do_divide`` is defined, then ``divid``, ``div``, |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
150 or even ``d`` will suffice, so long as there are |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
151 no other commands defined beginning with *divid*, |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
152 *div*, or *d*. |
331 | 153 |
345
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
154 This behavior can be turned off with ``app.abbrev`` (see :ref:`parameters`) |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
155 |
332 | 156 Misc. pre-defined commands |
157 ========================== | |
158 | |
159 Several generically useful commands are defined | |
160 with automatically included ``do_`` methods. | |
161 | |
162 .. automethod:: cmd2.Cmd.do_quit | |
163 | |
164 .. automethod:: cmd2.Cmd.do_pause | |
165 | |
166 .. automethod:: cmd2.Cmd.do_shell | |
167 | |
168 ( ``!`` is a shortcut for ``shell``; thus ``!ls`` | |
169 is equivalent to ``shell ls``.) | |
170 | |
171 | |
315 | 172 Transcript-based testing |
173 ======================== | |
345
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
174 |
6fe1e75e3a67
transcript test wasn't running pre and post cmd hooks
catherine@Drou
parents:
332
diff
changeset
|
175 If a ``cmd2``-based application is invoked with --test |