-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcmd.html
More file actions
481 lines (426 loc) · 46.1 KB
/
Copy pathcmd.html
File metadata and controls
481 lines (426 loc) · 46.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>24.2. cmd — 行指向のコマンドインタープリタのサポート — Python 3.6.5 ドキュメント</title>
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '3.6.5',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/translations.js"></script>
<script type="text/javascript" src="../_static/sidebar.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
title="Python 3.6.5 ドキュメント 内を検索"
href="../_static/opensearch.xml"/>
<link rel="author" title="このドキュメントについて" href="../about.html" />
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="検索" href="../search.html" />
<link rel="copyright" title="Copyright" href="../copyright.html" />
<link rel="next" title="24.3. shlex — 単純な字句解析" href="shlex.html" />
<link rel="prev" title="24.1. turtle — タートルグラフィックス" href="turtle.html" />
<link rel="shortcut icon" type="image/png" href="../_static/py.png" />
<link rel="canonical" href="https://docs.python.jp/3/library/cmd.html" /><script type="text/javascript">
$(document).ready(function() {
var base = 'https://docs.python.org/3.6/library/cmd.html';
$('a.headerlink').each(function() {
var html = '<a href="' + base + $(this).attr('href') +
'" title="原文へのリンク"><small>(原文)</small></a>';
$(this).after(html);
})
});
</script>
<script type="text/javascript" src="../_static/copybutton.js"></script>
<script type="text/javascript" src="../_static/version_switch.js"></script>
</head>
<body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>ナビゲーション</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="総索引"
accesskey="I">索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Pythonモジュール索引"
>モジュール</a> |</li>
<li class="right" >
<a href="shlex.html" title="24.3. shlex — 単純な字句解析"
accesskey="N">次へ</a> |</li>
<li class="right" >
<a href="turtle.html" title="24.1. turtle — タートルグラフィックス"
accesskey="P">前へ</a> |</li>
<li><img src="../_static/py.png" alt=""
style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> »</li>
<li>
<span class="version_switcher_placeholder">3.6.5</span>
<a href="../index.html">ドキュメント</a> »
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 標準ライブラリ</a> »</li>
<li class="nav-item nav-item-2"><a href="frameworks.html" accesskey="U">24. プログラムのフレームワーク</a> »</li>
<li class="right">
<div class="inline-search" style="display: none" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="Quick search" type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('.inline-search').show(0);</script>
|
</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="module-cmd">
<span id="cmd-support-for-line-oriented-command-interpreters"></span><h1>24.2. <a class="reference internal" href="#module-cmd" title="cmd: Build line-oriented command interpreters."><code class="xref py py-mod docutils literal"><span class="pre">cmd</span></code></a> — 行指向のコマンドインタープリタのサポート<a class="headerlink" href="#module-cmd" title="このヘッドラインへのパーマリンク">¶</a></h1>
<p><strong>ソースコード:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.6/Lib/cmd.py">Lib/cmd.py</a></p>
<hr class="docutils" />
<p><a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal"><span class="pre">Cmd</span></code></a> クラスでは、行指向のコマンドインタープリタを書くための簡単なフレームワークを提供します。テストハーネスや管理ツール、そして、後により洗練されたインターフェイスでラップするプロトタイプとして、こうしたインタープリタはよく役に立ちます。</p>
<dl class="class">
<dt id="cmd.Cmd">
<em class="property">class </em><code class="descclassname">cmd.</code><code class="descname">Cmd</code><span class="sig-paren">(</span><em>completekey='tab'</em>, <em>stdin=None</em>, <em>stdout=None</em><span class="sig-paren">)</span><a class="headerlink" href="#cmd.Cmd" title="この定義へのパーマリンク">¶</a></dt>
<dd><p><a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal"><span class="pre">Cmd</span></code></a> インスタンス、あるいはサブクラスのインスタンスは、行指向のインタープリタ・フレームワークです。 <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal"><span class="pre">Cmd</span></code></a> 自身をインスタンス化することはありません。むしろ、 <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal"><span class="pre">Cmd</span></code></a> のメソッドを継承したり、アクションメソッドをカプセル化するために、あなたが自分で定義するインタープリタクラスのスーパークラスとしての便利です。</p>
<p>オプション引数 <em>completekey</em> は、補完キーの <a class="reference internal" href="readline.html#module-readline" title="readline: GNU readline support for Python. (Unix)"><code class="xref py py-mod docutils literal"><span class="pre">readline</span></code></a> 名です。デフォルトは <code class="kbd docutils literal"><span class="pre">Tab</span></code> です。 <em>completekey</em> が <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal"><span class="pre">None</span></code></a> でなく、 <a class="reference internal" href="readline.html#module-readline" title="readline: GNU readline support for Python. (Unix)"><code class="xref py py-mod docutils literal"><span class="pre">readline</span></code></a> が利用できるならば、コマンド補完は自動的に行われます。</p>
<p>オプション引数の <em>stdin</em> と <em>stdout</em> には、Cmd またはそのサブクラスのインスタンスが入出力に使用するファイルオブジェクトを指定します。省略時には <a class="reference internal" href="sys.html#sys.stdin" title="sys.stdin"><code class="xref py py-data docutils literal"><span class="pre">sys.stdin</span></code></a> と <a class="reference internal" href="sys.html#sys.stdout" title="sys.stdout"><code class="xref py py-data docutils literal"><span class="pre">sys.stdout</span></code></a> が使用されます。</p>
<p>引数に渡した <em>stdin</em> を使いたい場合は、インスタンスの <a class="reference internal" href="#cmd.Cmd.use_rawinput" title="cmd.Cmd.use_rawinput"><code class="xref py py-attr docutils literal"><span class="pre">use_rawinput</span></code></a> 属性を <code class="docutils literal"><span class="pre">False</span></code> にセットしてください。そうしないと <em>stdin</em> は無視されます。</p>
</dd></dl>
<div class="section" id="cmd-objects">
<span id="id1"></span><h2>24.2.1. Cmdオブジェクト<a class="headerlink" href="#cmd-objects" title="このヘッドラインへのパーマリンク">¶</a></h2>
<p><a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal"><span class="pre">Cmd</span></code></a> インスタンスは、次のメソッドを持ちます:</p>
<dl class="method">
<dt id="cmd.Cmd.cmdloop">
<code class="descclassname">Cmd.</code><code class="descname">cmdloop</code><span class="sig-paren">(</span><em>intro=None</em><span class="sig-paren">)</span><a class="headerlink" href="#cmd.Cmd.cmdloop" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>プロンプトを繰り返し出力し、入力を受け取り、受け取った入力から取り去った先頭の語を解析し、その行の残りを引数としてアクションメソッドへディスパッチします。</p>
<p>オプションの引数は、最初のプロンプトの前に表示されるバナーあるいはイントロ用の文字列です (これはクラス属性 <a class="reference internal" href="#cmd.Cmd.intro" title="cmd.Cmd.intro"><code class="xref py py-attr docutils literal"><span class="pre">intro</span></code></a> をオーバーライドします)。</p>
<p><a class="reference internal" href="readline.html#module-readline" title="readline: GNU readline support for Python. (Unix)"><code class="xref py py-mod docutils literal"><span class="pre">readline</span></code></a> モジュールがロードされているなら、入力は自動的に <strong class="program">bash</strong> のような履歴リスト編集機能を受け継ぎます(例えば、 <code class="kbd docutils literal"><span class="pre">Control-P</span></code> は直前のコマンドへのスクロールバック、 <code class="kbd docutils literal"><span class="pre">Control-N</span></code> は次のものへ進む、 <code class="kbd docutils literal"><span class="pre">Control-F</span></code> はカーソルを右へ非破壊的に進める、 <code class="kbd docutils literal"><span class="pre">Control-B</span></code> はカーソルを非破壊的に左へ移動させる等)。</p>
<p>入力のファイル終端は、文字列 <code class="docutils literal"><span class="pre">'EOF'</span></code> として渡されます。</p>
<p>メソッド <code class="xref py py-meth docutils literal"><span class="pre">do_foo()</span></code> を持っている場合に限って、インタープリタのインスタンスはコマンド名 <code class="docutils literal"><span class="pre">foo</span></code> を認識します。特別な場合として、文字 <code class="docutils literal"><span class="pre">'?'</span></code> で始まる行はメソッド <code class="xref py py-meth docutils literal"><span class="pre">do_help()</span></code> へディスパッチします。他の特別な場合として、文字 <code class="docutils literal"><span class="pre">'!'</span></code> で始まる行はメソッド <code class="xref py py-meth docutils literal"><span class="pre">do_shell()</span></code> へディスパッチします(このようなメソッドが定義されている場合)。</p>
<p>このメソッドは <a class="reference internal" href="#cmd.Cmd.postcmd" title="cmd.Cmd.postcmd"><code class="xref py py-meth docutils literal"><span class="pre">postcmd()</span></code></a> メソッドが真を返したときに return します。 <a class="reference internal" href="#cmd.Cmd.postcmd" title="cmd.Cmd.postcmd"><code class="xref py py-meth docutils literal"><span class="pre">postcmd()</span></code></a> に対する <em>stop</em> 引数は、このコマンドが対応する <code class="xref py py-meth docutils literal"><span class="pre">do_*()</span></code> メソッドからの返り値です。</p>
<p>補完が有効になっているなら、コマンドの補完が自動的に行われます。また、コマンド引数の補完は、引数 <em>text</em>, <em>line</em>, <em>begidx</em>, および <em>endidx</em> と共に <code class="xref py py-meth docutils literal"><span class="pre">complete_foo()</span></code> を呼び出すことによって行われます。 <em>text</em> は、マッチしようとしている文字列の先頭の語です。返されるマッチは全てそれで始まっていなければなりません。 <em>line</em> は始めの空白を除いた現在の入力行です。 <em>begidx</em> と <em>endidx</em> は先頭のテキストの始まりと終わりのインデックスで、引数の位置に依存した異なる補完を提供するのに使えます。</p>
<p><a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal"><span class="pre">Cmd</span></code></a> のすべてのサブクラスは、定義済みの <code class="xref py py-meth docutils literal"><span class="pre">do_help()</span></code> を継承します。このメソッドは、(引数 <code class="docutils literal"><span class="pre">'bar'</span></code> と共に呼ばれたとすると)対応するメソッド <code class="xref py py-meth docutils literal"><span class="pre">help_bar()</span></code> を呼び出します。そのメソッドが存在しない場合、 <code class="xref py py-meth docutils literal"><span class="pre">do_bar()</span></code> の docstring があればそれを表示します。引数がなければ、 <code class="xref py py-meth docutils literal"><span class="pre">do_help()</span></code> は、すべての利用可能なヘルプ見出し(すなわち、対応する <code class="xref py py-meth docutils literal"><span class="pre">help_*()</span></code> メソッドを持つすべてのコマンドまたは docstring を持つコマンド)をリストアップします。また、文書化されていないコマンドでも、すべてリストアップします。</p>
</dd></dl>
<dl class="method">
<dt id="cmd.Cmd.onecmd">
<code class="descclassname">Cmd.</code><code class="descname">onecmd</code><span class="sig-paren">(</span><em>str</em><span class="sig-paren">)</span><a class="headerlink" href="#cmd.Cmd.onecmd" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>プロンプトに答えてタイプしたかのように引数を解釈実行します。これをオーバーライドすることがあるかもしれませんが、通常は必要ないでしょう。便利な実行フックについては、 <a class="reference internal" href="#cmd.Cmd.precmd" title="cmd.Cmd.precmd"><code class="xref py py-meth docutils literal"><span class="pre">precmd()</span></code></a> と <a class="reference internal" href="#cmd.Cmd.postcmd" title="cmd.Cmd.postcmd"><code class="xref py py-meth docutils literal"><span class="pre">postcmd()</span></code></a> メソッドを参照してください。戻り値は、インタープリタによるコマンドの解釈実行をやめるかどうかを示すフラグです。コマンド <em>str</em> に対応する <code class="xref py py-meth docutils literal"><span class="pre">do_*()</span></code> メソッドがある場合、そのメソッドの返り値が返されます。そうでない場合は <a class="reference internal" href="#cmd.Cmd.default" title="cmd.Cmd.default"><code class="xref py py-meth docutils literal"><span class="pre">default()</span></code></a> メソッドからの返り値が返されます。</p>
</dd></dl>
<dl class="method">
<dt id="cmd.Cmd.emptyline">
<code class="descclassname">Cmd.</code><code class="descname">emptyline</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#cmd.Cmd.emptyline" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>プロンプトに空行が入力されたときに呼び出されるメソッド。このメソッドがオーバーライドされていないなら、最後に入力された空行でないコマンドが繰り返されます。</p>
</dd></dl>
<dl class="method">
<dt id="cmd.Cmd.default">
<code class="descclassname">Cmd.</code><code class="descname">default</code><span class="sig-paren">(</span><em>line</em><span class="sig-paren">)</span><a class="headerlink" href="#cmd.Cmd.default" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>コマンドの先頭の語が認識されないときに、入力行に対して呼び出されます。このメソッドがオーバーライドされていないなら、エラーメッセージを表示して戻ります。</p>
</dd></dl>
<dl class="method">
<dt id="cmd.Cmd.completedefault">
<code class="descclassname">Cmd.</code><code class="descname">completedefault</code><span class="sig-paren">(</span><em>text</em>, <em>line</em>, <em>begidx</em>, <em>endidx</em><span class="sig-paren">)</span><a class="headerlink" href="#cmd.Cmd.completedefault" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>利用可能なコマンド固有の <code class="xref py py-meth docutils literal"><span class="pre">complete_*()</span></code> が存在しないときに、入力行を補完するために呼び出されるメソッド。デフォルトでは、空行を返します。</p>
</dd></dl>
<dl class="method">
<dt id="cmd.Cmd.precmd">
<code class="descclassname">Cmd.</code><code class="descname">precmd</code><span class="sig-paren">(</span><em>line</em><span class="sig-paren">)</span><a class="headerlink" href="#cmd.Cmd.precmd" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>コマンド行 <em>line</em> が解釈実行される直前、しかし入力プロンプトが作られ表示された後に実行されるフックメソッド。このメソッドは <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal"><span class="pre">Cmd</span></code></a> 内のスタブであって、サブクラスでオーバーライドされるために存在します。戻り値は <a class="reference internal" href="#cmd.Cmd.onecmd" title="cmd.Cmd.onecmd"><code class="xref py py-meth docutils literal"><span class="pre">onecmd()</span></code></a> メソッドが実行するコマンドとして使われます。 <a class="reference internal" href="#cmd.Cmd.precmd" title="cmd.Cmd.precmd"><code class="xref py py-meth docutils literal"><span class="pre">precmd()</span></code></a> の実装では、コマンドを書き換えるかもしれないし、あるいは単に変更していない <em>line</em> を返すかもしれません。</p>
</dd></dl>
<dl class="method">
<dt id="cmd.Cmd.postcmd">
<code class="descclassname">Cmd.</code><code class="descname">postcmd</code><span class="sig-paren">(</span><em>stop</em>, <em>line</em><span class="sig-paren">)</span><a class="headerlink" href="#cmd.Cmd.postcmd" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>コマンドディスパッチが終わった直後に実行されるフックメソッド。このメソッドは <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal"><span class="pre">Cmd</span></code></a> 内のスタブで、サブクラスでオーバーライドされるために存在します。 <em>line</em> は実行されたコマンド行で、 <em>stop</em> は <a class="reference internal" href="#cmd.Cmd.postcmd" title="cmd.Cmd.postcmd"><code class="xref py py-meth docutils literal"><span class="pre">postcmd()</span></code></a> の呼び出しの後に実行を停止するかどうかを示すフラグです。これは <a class="reference internal" href="#cmd.Cmd.onecmd" title="cmd.Cmd.onecmd"><code class="xref py py-meth docutils literal"><span class="pre">onecmd()</span></code></a> メソッドの戻り値です。このメソッドの戻り値は、 <em>stop</em> に対応する内部フラグの新しい値として使われます。偽を返すと、実行を続けます。</p>
</dd></dl>
<dl class="method">
<dt id="cmd.Cmd.preloop">
<code class="descclassname">Cmd.</code><code class="descname">preloop</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#cmd.Cmd.preloop" title="この定義へのパーマリンク">¶</a></dt>
<dd><p><a class="reference internal" href="#cmd.Cmd.cmdloop" title="cmd.Cmd.cmdloop"><code class="xref py py-meth docutils literal"><span class="pre">cmdloop()</span></code></a> が呼び出されたときに一度だけ実行されるフックメソッド。このメソッドは <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal"><span class="pre">Cmd</span></code></a> 内のスタブであって、サブクラスでオーバーライドされるために存在します。</p>
</dd></dl>
<dl class="method">
<dt id="cmd.Cmd.postloop">
<code class="descclassname">Cmd.</code><code class="descname">postloop</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#cmd.Cmd.postloop" title="この定義へのパーマリンク">¶</a></dt>
<dd><p><a class="reference internal" href="#cmd.Cmd.cmdloop" title="cmd.Cmd.cmdloop"><code class="xref py py-meth docutils literal"><span class="pre">cmdloop()</span></code></a> が戻る直前に一度だけ実行されるフックメソッド。このメソッドは <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal"><span class="pre">Cmd</span></code></a> 内のスタブであって、サブクラスでオーバーライドされるために存在します。</p>
</dd></dl>
<p><a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal"><span class="pre">Cmd</span></code></a> のサブクラスのインスタンスは、公開されたインスタンス変数をいくつか持っています:</p>
<dl class="attribute">
<dt id="cmd.Cmd.prompt">
<code class="descclassname">Cmd.</code><code class="descname">prompt</code><a class="headerlink" href="#cmd.Cmd.prompt" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>入力を求めるために表示されるプロンプト。</p>
</dd></dl>
<dl class="attribute">
<dt id="cmd.Cmd.identchars">
<code class="descclassname">Cmd.</code><code class="descname">identchars</code><a class="headerlink" href="#cmd.Cmd.identchars" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>コマンドの先頭の語として受け入れられる文字の文字列。</p>
</dd></dl>
<dl class="attribute">
<dt id="cmd.Cmd.lastcmd">
<code class="descclassname">Cmd.</code><code class="descname">lastcmd</code><a class="headerlink" href="#cmd.Cmd.lastcmd" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>最後の空でないコマンド接頭辞。</p>
</dd></dl>
<dl class="attribute">
<dt id="cmd.Cmd.cmdqueue">
<code class="descclassname">Cmd.</code><code class="descname">cmdqueue</code><a class="headerlink" href="#cmd.Cmd.cmdqueue" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>キューに入れられた入力行のリスト。cmdqueue リストは新たな入力が必要な際に <a class="reference internal" href="#cmd.Cmd.cmdloop" title="cmd.Cmd.cmdloop"><code class="xref py py-meth docutils literal"><span class="pre">cmdloop()</span></code></a> 内でチェックされます; これが空でない場合、その要素は、あたかもプロンプトから入力されたかのように順に処理されます。</p>
</dd></dl>
<dl class="attribute">
<dt id="cmd.Cmd.intro">
<code class="descclassname">Cmd.</code><code class="descname">intro</code><a class="headerlink" href="#cmd.Cmd.intro" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>イントロあるいはバナーとして表示される文字列。 <a class="reference internal" href="#cmd.Cmd.cmdloop" title="cmd.Cmd.cmdloop"><code class="xref py py-meth docutils literal"><span class="pre">cmdloop()</span></code></a> メソッドに引数を与えるために、オーバーライドされるかもしれません。</p>
</dd></dl>
<dl class="attribute">
<dt id="cmd.Cmd.doc_header">
<code class="descclassname">Cmd.</code><code class="descname">doc_header</code><a class="headerlink" href="#cmd.Cmd.doc_header" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>ヘルプ出力に文書化されたコマンドのセクションがある場合に表示するヘッダ。</p>
</dd></dl>
<dl class="attribute">
<dt id="cmd.Cmd.misc_header">
<code class="descclassname">Cmd.</code><code class="descname">misc_header</code><a class="headerlink" href="#cmd.Cmd.misc_header" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>ヘルプの出力にその他のヘルプ見出しがある(すなわち、 <code class="xref py py-meth docutils literal"><span class="pre">do_*()</span></code> メソッドに対応していない <code class="xref py py-meth docutils literal"><span class="pre">help_*()</span></code> メソッドが存在する)場合に表示するヘッダ。</p>
</dd></dl>
<dl class="attribute">
<dt id="cmd.Cmd.undoc_header">
<code class="descclassname">Cmd.</code><code class="descname">undoc_header</code><a class="headerlink" href="#cmd.Cmd.undoc_header" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>ヘルプ出力に文書化されていないコマンドのセクションがある(すなわち、対応する <code class="xref py py-meth docutils literal"><span class="pre">help_*()</span></code> メソッドを持たない <code class="xref py py-meth docutils literal"><span class="pre">do_*()</span></code> メソッドが存在する)場合に表示するヘッダ。</p>
</dd></dl>
<dl class="attribute">
<dt id="cmd.Cmd.ruler">
<code class="descclassname">Cmd.</code><code class="descname">ruler</code><a class="headerlink" href="#cmd.Cmd.ruler" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>ヘルプメッセージのヘッダの下に、区切り行を表示するために使われる文字。空のときは、ルーラ行が表示されません。デフォルトでは、<code class="docutils literal"><span class="pre">'='</span></code> です。</p>
</dd></dl>
<dl class="attribute">
<dt id="cmd.Cmd.use_rawinput">
<code class="descclassname">Cmd.</code><code class="descname">use_rawinput</code><a class="headerlink" href="#cmd.Cmd.use_rawinput" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>フラグで、デフォルトでは真です。真ならば、 <a class="reference internal" href="#cmd.Cmd.cmdloop" title="cmd.Cmd.cmdloop"><code class="xref py py-meth docutils literal"><span class="pre">cmdloop()</span></code></a> はプロンプトを表示して次のコマンド読み込むために <a class="reference internal" href="functions.html#input" title="input"><code class="xref py py-func docutils literal"><span class="pre">input()</span></code></a> を使います。偽ならば、 <code class="xref py py-meth docutils literal"><span class="pre">sys.stdout.write()</span></code> と <code class="xref py py-meth docutils literal"><span class="pre">sys.stdin.readline()</span></code> が使われます。 (これが意味するのは、 <a class="reference internal" href="readline.html#module-readline" title="readline: GNU readline support for Python. (Unix)"><code class="xref py py-mod docutils literal"><span class="pre">readline</span></code></a> を import することによって、それをサポートするシステム上では、インタープリタが自動的に <strong class="program">Emacs</strong> 形式の行編集とコマンド履歴のキーストロークをサポートするということです。)</p>
</dd></dl>
</div>
<div class="section" id="cmd-example">
<span id="id2"></span><h2>24.2.2. Cmd の例<a class="headerlink" href="#cmd-example" title="このヘッドラインへのパーマリンク">¶</a></h2>
<p><a class="reference internal" href="#module-cmd" title="cmd: Build line-oriented command interpreters."><code class="xref py py-mod docutils literal"><span class="pre">cmd</span></code></a> モジュールは、ユーザーがプログラムと対話的に連携できるカスタムシェルを構築するのに主に役立ちます。</p>
<p>この節では、<a class="reference internal" href="turtle.html#module-turtle" title="turtle: An educational framework for simple graphics applications"><code class="xref py py-mod docutils literal"><span class="pre">turtle</span></code></a> モジュールのいくつかのコマンドを持ったシェルの作成方法の簡単な例を示します。</p>
<p><a class="reference internal" href="turtle.html#turtle.forward" title="turtle.forward"><code class="xref py py-meth docutils literal"><span class="pre">forward()</span></code></a> のような基本的な turtle コマンドは
<a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal"><span class="pre">Cmd</span></code></a> のサブクラスに <code class="xref py py-meth docutils literal"><span class="pre">do_forward()</span></code> と名付けられたメソッドで追加されます。
引数は数値に変換され、 turtle モジュールに振り分けられます。ドキュメント文字列はシェルによって提供されるヘルプユーティリティで使用されます。</p>
<p>この例には、基本的な記録機能と再実行機能が含まれていて、入力を小文字に変換しコマンドをファイルに書き込む責務を持たせた <a class="reference internal" href="#cmd.Cmd.precmd" title="cmd.Cmd.precmd"><code class="xref py py-meth docutils literal"><span class="pre">precmd()</span></code></a> メソッドに実装されています。
<code class="xref py py-meth docutils literal"><span class="pre">do_playback()</span></code> メソッドはファイルを読み込み、そこに記録されているコマンドをすぐに再実行するために <code class="xref py py-attr docutils literal"><span class="pre">cmdqueue</span></code> に追加します:</p>
<div class="highlight-python3"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">cmd</span><span class="o">,</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">turtle</span> <span class="k">import</span> <span class="o">*</span>
<span class="k">class</span> <span class="nc">TurtleShell</span><span class="p">(</span><span class="n">cmd</span><span class="o">.</span><span class="n">Cmd</span><span class="p">):</span>
<span class="n">intro</span> <span class="o">=</span> <span class="s1">'Welcome to the turtle shell. Type help or ? to list commands.</span><span class="se">\n</span><span class="s1">'</span>
<span class="n">prompt</span> <span class="o">=</span> <span class="s1">'(turtle) '</span>
<span class="n">file</span> <span class="o">=</span> <span class="kc">None</span>
<span class="c1"># ----- basic turtle commands -----</span>
<span class="k">def</span> <span class="nf">do_forward</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="s1">'Move the turtle forward by the specified distance: FORWARD 10'</span>
<span class="n">forward</span><span class="p">(</span><span class="o">*</span><span class="n">parse</span><span class="p">(</span><span class="n">arg</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">do_right</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="s1">'Turn turtle right by given number of degrees: RIGHT 20'</span>
<span class="n">right</span><span class="p">(</span><span class="o">*</span><span class="n">parse</span><span class="p">(</span><span class="n">arg</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">do_left</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="s1">'Turn turtle left by given number of degrees: LEFT 90'</span>
<span class="n">left</span><span class="p">(</span><span class="o">*</span><span class="n">parse</span><span class="p">(</span><span class="n">arg</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">do_goto</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="s1">'Move turtle to an absolute position with changing orientation. GOTO 100 200'</span>
<span class="n">goto</span><span class="p">(</span><span class="o">*</span><span class="n">parse</span><span class="p">(</span><span class="n">arg</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">do_home</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="s1">'Return turtle to the home position: HOME'</span>
<span class="n">home</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">do_circle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="s1">'Draw circle with given radius an options extent and steps: CIRCLE 50'</span>
<span class="n">circle</span><span class="p">(</span><span class="o">*</span><span class="n">parse</span><span class="p">(</span><span class="n">arg</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">do_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="s1">'Print the current turtle position: POSITION'</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Current position is </span><span class="si">%d</span><span class="s1"> </span><span class="si">%d</span><span class="se">\n</span><span class="s1">'</span> <span class="o">%</span> <span class="n">position</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">do_heading</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="s1">'Print the current turtle heading in degrees: HEADING'</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Current heading is </span><span class="si">%d</span><span class="se">\n</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">heading</span><span class="p">(),))</span>
<span class="k">def</span> <span class="nf">do_color</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="s1">'Set the color: COLOR BLUE'</span>
<span class="n">color</span><span class="p">(</span><span class="n">arg</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">do_undo</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="s1">'Undo (repeatedly) the last turtle action(s): UNDO'</span>
<span class="k">def</span> <span class="nf">do_reset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="s1">'Clear the screen and return turtle to center: RESET'</span>
<span class="n">reset</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">do_bye</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="s1">'Stop recording, close the turtle window, and exit: BYE'</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Thank you for using Turtle'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">bye</span><span class="p">()</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="c1"># ----- record and playback -----</span>
<span class="k">def</span> <span class="nf">do_record</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="s1">'Save future commands to filename: RECORD rose.cmd'</span>
<span class="bp">self</span><span class="o">.</span><span class="n">file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">do_playback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
<span class="s1">'Playback commands from a file: PLAYBACK rose.cmd'</span>
<span class="bp">self</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmdqueue</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">precmd</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span>
<span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span> <span class="ow">and</span> <span class="s1">'playback'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">line</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="n">line</span><span class="p">,</span> <span class="n">file</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="p">)</span>
<span class="k">return</span> <span class="n">line</span>
<span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">file</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">arg</span><span class="p">):</span>
<span class="s1">'Convert a series of zero or more numbers to an argument tuple'</span>
<span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">arg</span><span class="o">.</span><span class="n">split</span><span class="p">()))</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
<span class="n">TurtleShell</span><span class="p">()</span><span class="o">.</span><span class="n">cmdloop</span><span class="p">()</span>
</pre></div>
</div>
<p>以下は、turtle シェルでの機能のヘルプ表示、空行によるコマンドの繰り返し、単純な記録と再実行のセッション例です:</p>
<div class="highlight-none"><div class="highlight"><pre><span></span>Welcome to the turtle shell. Type help or ? to list commands.
(turtle) ?
Documented commands (type help <topic>):
========================================
bye color goto home playback record right
circle forward heading left position reset undo
(turtle) help forward
Move the turtle forward by the specified distance: FORWARD 10
(turtle) record spiral.cmd
(turtle) position
Current position is 0 0
(turtle) heading
Current heading is 0
(turtle) reset
(turtle) circle 20
(turtle) right 30
(turtle) circle 40
(turtle) right 30
(turtle) circle 60
(turtle) right 30
(turtle) circle 80
(turtle) right 30
(turtle) circle 100
(turtle) right 30
(turtle) circle 120
(turtle) right 30
(turtle) circle 120
(turtle) heading
Current heading is 180
(turtle) forward 100
(turtle)
(turtle) right 90
(turtle) forward 100
(turtle)
(turtle) right 90
(turtle) forward 400
(turtle) right 90
(turtle) forward 500
(turtle) right 90
(turtle) forward 400
(turtle) right 90
(turtle) forward 300
(turtle) playback spiral.cmd
Current position is 0 0
Current heading is 0
Current heading is 180
(turtle) bye
Thank you for using Turtle
</pre></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h3><a href="../contents.html">目次</a></h3>
<ul>
<li><a class="reference internal" href="#">24.2. <code class="docutils literal"><span class="pre">cmd</span></code> — 行指向のコマンドインタープリタのサポート</a><ul>
<li><a class="reference internal" href="#cmd-objects">24.2.1. Cmdオブジェクト</a></li>
<li><a class="reference internal" href="#cmd-example">24.2.2. Cmd の例</a></li>
</ul>
</li>
</ul>
<h4>前のトピックへ</h4>
<p class="topless"><a href="turtle.html"
title="前の章へ">24.1. <code class="docutils literal"><span class="pre">turtle</span></code> — タートルグラフィックス</a></p>
<h4>次のトピックへ</h4>
<p class="topless"><a href="shlex.html"
title="次の章へ">24.3. <code class="docutils literal"><span class="pre">shlex</span></code> — 単純な字句解析</a></p>
<div role="note" aria-label="source link">
<h3>このページ</h3>
<ul class="this-page-menu">
<li><a href="../bugs.html">バグ報告</a></li>
<li>
<a href="https://github.com/python/cpython/blob/3.6/Doc/library/cmd.rst"
rel="nofollow">ソースの表示
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>ナビゲーション</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="総索引"
>索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Pythonモジュール索引"
>モジュール</a> |</li>
<li class="right" >
<a href="shlex.html" title="24.3. shlex — 単純な字句解析"
>次へ</a> |</li>
<li class="right" >
<a href="turtle.html" title="24.1. turtle — タートルグラフィックス"
>前へ</a> |</li>
<li><img src="../_static/py.png" alt=""
style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> »</li>
<li>
<span class="version_switcher_placeholder">3.6.5</span>
<a href="../index.html">ドキュメント</a> »
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 標準ライブラリ</a> »</li>
<li class="nav-item nav-item-2"><a href="frameworks.html" >24. プログラムのフレームワーク</a> »</li>
<li class="right">
<div class="inline-search" style="display: none" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="Quick search" type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('.inline-search').show(0);</script>
|
</li>
</ul>
</div>
<div class="footer">
© <a href="../copyright.html">Copyright</a> 2001-2018, Python Software Foundation.
<br />
Python Software Foundation は非営利団体です。
<a href="https://www.python.org/psf/donations/">寄付</a>
<br />
最終更新日時: 7月 29, 2018
<a href="../bugs.html">バグを見つけたら</a>?
<br />
このドキュメントは <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.6.5 を使って作成されました。
</div>
</body>
</html>