554 lines
43 KiB
HTML
554 lines
43 KiB
HTML
|
|
|||
|
<!DOCTYPE html>
|
|||
|
|
|||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|||
|
<head>
|
|||
|
<meta charset="utf-8" />
|
|||
|
<title>cmd — Support for line-oriented command interpreters — Python 3.7.4 documentation</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" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></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/language_data.js"></script>
|
|||
|
|
|||
|
<script type="text/javascript" src="../_static/sidebar.js"></script>
|
|||
|
|
|||
|
<link rel="search" type="application/opensearchdescription+xml"
|
|||
|
title="Search within Python 3.7.4 documentation"
|
|||
|
href="../_static/opensearch.xml"/>
|
|||
|
<link rel="author" title="About these documents" href="../about.html" />
|
|||
|
<link rel="index" title="Index" href="../genindex.html" />
|
|||
|
<link rel="search" title="Search" href="../search.html" />
|
|||
|
<link rel="copyright" title="Copyright" href="../copyright.html" />
|
|||
|
<link rel="next" title="shlex — Simple lexical analysis" href="shlex.html" />
|
|||
|
<link rel="prev" title="turtle — Turtle graphics" href="turtle.html" />
|
|||
|
<link rel="shortcut icon" type="image/png" href="../_static/py.png" />
|
|||
|
<link rel="canonical" href="https://docs.python.org/3/library/cmd.html" />
|
|||
|
|
|||
|
<script type="text/javascript" src="../_static/copybutton.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/switchers.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<style>
|
|||
|
@media only screen {
|
|||
|
table.full-width-table {
|
|||
|
width: 100%;
|
|||
|
}
|
|||
|
}
|
|||
|
</style>
|
|||
|
|
|||
|
|
|||
|
</head><body>
|
|||
|
|
|||
|
<div class="related" role="navigation" aria-label="related navigation">
|
|||
|
<h3>Navigation</h3>
|
|||
|
<ul>
|
|||
|
<li class="right" style="margin-right: 10px">
|
|||
|
<a href="../genindex.html" title="General Index"
|
|||
|
accesskey="I">index</a></li>
|
|||
|
<li class="right" >
|
|||
|
<a href="../py-modindex.html" title="Python Module Index"
|
|||
|
>modules</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="shlex.html" title="shlex — Simple lexical analysis"
|
|||
|
accesskey="N">next</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="turtle.html" title="turtle — Turtle graphics"
|
|||
|
accesskey="P">previous</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="language_switcher_placeholder">en</span>
|
|||
|
<span class="version_switcher_placeholder">3.7.4</span>
|
|||
|
<a href="../index.html">Documentation </a> »
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
|
|||
|
<li class="nav-item nav-item-2"><a href="frameworks.html" accesskey="U">Program Frameworks</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><a class="reference internal" href="#module-cmd" title="cmd: Build line-oriented command interpreters."><code class="xref py py-mod docutils literal notranslate"><span class="pre">cmd</span></code></a> — Support for line-oriented command interpreters<a class="headerlink" href="#module-cmd" title="Permalink to this headline">¶</a></h1>
|
|||
|
<p><strong>Source code:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.7/Lib/cmd.py">Lib/cmd.py</a></p>
|
|||
|
<hr class="docutils" />
|
|||
|
<p>The <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cmd</span></code></a> class provides a simple framework for writing line-oriented
|
|||
|
command interpreters. These are often useful for test harnesses, administrative
|
|||
|
tools, and prototypes that will later be wrapped in a more sophisticated
|
|||
|
interface.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cmd</span></code></a> instance or subclass instance is a line-oriented interpreter
|
|||
|
framework. There is no good reason to instantiate <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cmd</span></code></a> itself; rather,
|
|||
|
it’s useful as a superclass of an interpreter class you define yourself in order
|
|||
|
to inherit <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cmd</span></code></a>’s methods and encapsulate action methods.</p>
|
|||
|
<p>The optional argument <em>completekey</em> is the <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 notranslate"><span class="pre">readline</span></code></a> name of a completion
|
|||
|
key; it defaults to <kbd class="kbd docutils literal notranslate">Tab</kbd>. If <em>completekey</em> is not <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a> and
|
|||
|
<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 notranslate"><span class="pre">readline</span></code></a> is available, command completion is done automatically.</p>
|
|||
|
<p>The optional arguments <em>stdin</em> and <em>stdout</em> specify the input and output file
|
|||
|
objects that the Cmd instance or subclass instance will use for input and
|
|||
|
output. If not specified, they will default to <a class="reference internal" href="sys.html#sys.stdin" title="sys.stdin"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.stdin</span></code></a> and
|
|||
|
<a class="reference internal" href="sys.html#sys.stdout" title="sys.stdout"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.stdout</span></code></a>.</p>
|
|||
|
<p>If you want a given <em>stdin</em> to be used, make sure to set the instance’s
|
|||
|
<a class="reference internal" href="#cmd.Cmd.use_rawinput" title="cmd.Cmd.use_rawinput"><code class="xref py py-attr docutils literal notranslate"><span class="pre">use_rawinput</span></code></a> attribute to <code class="docutils literal notranslate"><span class="pre">False</span></code>, otherwise <em>stdin</em> will be
|
|||
|
ignored.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<div class="section" id="cmd-objects">
|
|||
|
<span id="id1"></span><h2>Cmd Objects<a class="headerlink" href="#cmd-objects" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>A <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cmd</span></code></a> instance has the following methods:</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Repeatedly issue a prompt, accept input, parse an initial prefix off the
|
|||
|
received input, and dispatch to action methods, passing them the remainder of
|
|||
|
the line as argument.</p>
|
|||
|
<p>The optional argument is a banner or intro string to be issued before the first
|
|||
|
prompt (this overrides the <a class="reference internal" href="#cmd.Cmd.intro" title="cmd.Cmd.intro"><code class="xref py py-attr docutils literal notranslate"><span class="pre">intro</span></code></a> class attribute).</p>
|
|||
|
<p>If the <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 notranslate"><span class="pre">readline</span></code></a> module is loaded, input will automatically inherit
|
|||
|
<strong class="program">bash</strong>-like history-list editing (e.g. <kbd class="kbd docutils literal notranslate">Control-P</kbd> scrolls back
|
|||
|
to the last command, <kbd class="kbd docutils literal notranslate">Control-N</kbd> forward to the next one, <kbd class="kbd docutils literal notranslate">Control-F</kbd>
|
|||
|
moves the cursor to the right non-destructively, <kbd class="kbd docutils literal notranslate">Control-B</kbd> moves the
|
|||
|
cursor to the left non-destructively, etc.).</p>
|
|||
|
<p>An end-of-file on input is passed back as the string <code class="docutils literal notranslate"><span class="pre">'EOF'</span></code>.</p>
|
|||
|
<p id="index-0">An interpreter instance will recognize a command name <code class="docutils literal notranslate"><span class="pre">foo</span></code> if and only if it
|
|||
|
has a method <code class="xref py py-meth docutils literal notranslate"><span class="pre">do_foo()</span></code>. As a special case, a line beginning with the
|
|||
|
character <code class="docutils literal notranslate"><span class="pre">'?'</span></code> is dispatched to the method <code class="xref py py-meth docutils literal notranslate"><span class="pre">do_help()</span></code>. As another
|
|||
|
special case, a line beginning with the character <code class="docutils literal notranslate"><span class="pre">'!'</span></code> is dispatched to the
|
|||
|
method <code class="xref py py-meth docutils literal notranslate"><span class="pre">do_shell()</span></code> (if such a method is defined).</p>
|
|||
|
<p>This method will return when the <a class="reference internal" href="#cmd.Cmd.postcmd" title="cmd.Cmd.postcmd"><code class="xref py py-meth docutils literal notranslate"><span class="pre">postcmd()</span></code></a> method returns a true value.
|
|||
|
The <em>stop</em> argument to <a class="reference internal" href="#cmd.Cmd.postcmd" title="cmd.Cmd.postcmd"><code class="xref py py-meth docutils literal notranslate"><span class="pre">postcmd()</span></code></a> is the return value from the command’s
|
|||
|
corresponding <code class="xref py py-meth docutils literal notranslate"><span class="pre">do_*()</span></code> method.</p>
|
|||
|
<p>If completion is enabled, completing commands will be done automatically, and
|
|||
|
completing of commands args is done by calling <code class="xref py py-meth docutils literal notranslate"><span class="pre">complete_foo()</span></code> with
|
|||
|
arguments <em>text</em>, <em>line</em>, <em>begidx</em>, and <em>endidx</em>. <em>text</em> is the string prefix
|
|||
|
we are attempting to match: all returned matches must begin with it. <em>line</em> is
|
|||
|
the current input line with leading whitespace removed, <em>begidx</em> and <em>endidx</em>
|
|||
|
are the beginning and ending indexes of the prefix text, which could be used to
|
|||
|
provide different completion depending upon which position the argument is in.</p>
|
|||
|
<p>All subclasses of <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cmd</span></code></a> inherit a predefined <code class="xref py py-meth docutils literal notranslate"><span class="pre">do_help()</span></code>. This
|
|||
|
method, called with an argument <code class="docutils literal notranslate"><span class="pre">'bar'</span></code>, invokes the corresponding method
|
|||
|
<code class="xref py py-meth docutils literal notranslate"><span class="pre">help_bar()</span></code>, and if that is not present, prints the docstring of
|
|||
|
<code class="xref py py-meth docutils literal notranslate"><span class="pre">do_bar()</span></code>, if available. With no argument, <code class="xref py py-meth docutils literal notranslate"><span class="pre">do_help()</span></code> lists all
|
|||
|
available help topics (that is, all commands with corresponding
|
|||
|
<code class="xref py py-meth docutils literal notranslate"><span class="pre">help_*()</span></code> methods or commands that have docstrings), and also lists any
|
|||
|
undocumented commands.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Interpret the argument as though it had been typed in response to the prompt.
|
|||
|
This may be overridden, but should not normally need to be; see the
|
|||
|
<a class="reference internal" href="#cmd.Cmd.precmd" title="cmd.Cmd.precmd"><code class="xref py py-meth docutils literal notranslate"><span class="pre">precmd()</span></code></a> and <a class="reference internal" href="#cmd.Cmd.postcmd" title="cmd.Cmd.postcmd"><code class="xref py py-meth docutils literal notranslate"><span class="pre">postcmd()</span></code></a> methods for useful execution hooks. The
|
|||
|
return value is a flag indicating whether interpretation of commands by the
|
|||
|
interpreter should stop. If there is a <code class="xref py py-meth docutils literal notranslate"><span class="pre">do_*()</span></code> method for the command
|
|||
|
<em>str</em>, the return value of that method is returned, otherwise the return value
|
|||
|
from the <a class="reference internal" href="#cmd.Cmd.default" title="cmd.Cmd.default"><code class="xref py py-meth docutils literal notranslate"><span class="pre">default()</span></code></a> method is returned.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Method called when an empty line is entered in response to the prompt. If this
|
|||
|
method is not overridden, it repeats the last nonempty command entered.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Method called on an input line when the command prefix is not recognized. If
|
|||
|
this method is not overridden, it prints an error message and returns.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Method called to complete an input line when no command-specific
|
|||
|
<code class="xref py py-meth docutils literal notranslate"><span class="pre">complete_*()</span></code> method is available. By default, it returns an empty list.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Hook method executed just before the command line <em>line</em> is interpreted, but
|
|||
|
after the input prompt is generated and issued. This method is a stub in
|
|||
|
<a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cmd</span></code></a>; it exists to be overridden by subclasses. The return value is
|
|||
|
used as the command which will be executed by the <a class="reference internal" href="#cmd.Cmd.onecmd" title="cmd.Cmd.onecmd"><code class="xref py py-meth docutils literal notranslate"><span class="pre">onecmd()</span></code></a> method; the
|
|||
|
<a class="reference internal" href="#cmd.Cmd.precmd" title="cmd.Cmd.precmd"><code class="xref py py-meth docutils literal notranslate"><span class="pre">precmd()</span></code></a> implementation may re-write the command or simply return <em>line</em>
|
|||
|
unchanged.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Hook method executed just after a command dispatch is finished. This method is
|
|||
|
a stub in <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cmd</span></code></a>; it exists to be overridden by subclasses. <em>line</em> is the
|
|||
|
command line which was executed, and <em>stop</em> is a flag which indicates whether
|
|||
|
execution will be terminated after the call to <a class="reference internal" href="#cmd.Cmd.postcmd" title="cmd.Cmd.postcmd"><code class="xref py py-meth docutils literal notranslate"><span class="pre">postcmd()</span></code></a>; this will be the
|
|||
|
return value of the <a class="reference internal" href="#cmd.Cmd.onecmd" title="cmd.Cmd.onecmd"><code class="xref py py-meth docutils literal notranslate"><span class="pre">onecmd()</span></code></a> method. The return value of this method will
|
|||
|
be used as the new value for the internal flag which corresponds to <em>stop</em>;
|
|||
|
returning false will cause interpretation to continue.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Hook method executed once when <a class="reference internal" href="#cmd.Cmd.cmdloop" title="cmd.Cmd.cmdloop"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cmdloop()</span></code></a> is called. This method is a stub
|
|||
|
in <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cmd</span></code></a>; it exists to be overridden by subclasses.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Hook method executed once when <a class="reference internal" href="#cmd.Cmd.cmdloop" title="cmd.Cmd.cmdloop"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cmdloop()</span></code></a> is about to return. This method
|
|||
|
is a stub in <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cmd</span></code></a>; it exists to be overridden by subclasses.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<p>Instances of <a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cmd</span></code></a> subclasses have some public instance variables:</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The prompt issued to solicit input.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The string of characters accepted for the command prefix.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The last nonempty command prefix seen.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A list of queued input lines. The cmdqueue list is checked in
|
|||
|
<a class="reference internal" href="#cmd.Cmd.cmdloop" title="cmd.Cmd.cmdloop"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cmdloop()</span></code></a> when new input is needed; if it is nonempty, its elements
|
|||
|
will be processed in order, as if entered at the prompt.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A string to issue as an intro or banner. May be overridden by giving the
|
|||
|
<a class="reference internal" href="#cmd.Cmd.cmdloop" title="cmd.Cmd.cmdloop"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cmdloop()</span></code></a> method an argument.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The header to issue if the help output has a section for documented commands.</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The header to issue if the help output has a section for miscellaneous help
|
|||
|
topics (that is, there are <code class="xref py py-meth docutils literal notranslate"><span class="pre">help_*()</span></code> methods without corresponding
|
|||
|
<code class="xref py py-meth docutils literal notranslate"><span class="pre">do_*()</span></code> methods).</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The header to issue if the help output has a section for undocumented commands
|
|||
|
(that is, there are <code class="xref py py-meth docutils literal notranslate"><span class="pre">do_*()</span></code> methods without corresponding <code class="xref py py-meth docutils literal notranslate"><span class="pre">help_*()</span></code>
|
|||
|
methods).</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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The character used to draw separator lines under the help-message headers. If
|
|||
|
empty, no ruler line is drawn. It defaults to <code class="docutils literal notranslate"><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="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A flag, defaulting to true. If true, <a class="reference internal" href="#cmd.Cmd.cmdloop" title="cmd.Cmd.cmdloop"><code class="xref py py-meth docutils literal notranslate"><span class="pre">cmdloop()</span></code></a> uses <a class="reference internal" href="functions.html#input" title="input"><code class="xref py py-func docutils literal notranslate"><span class="pre">input()</span></code></a> to
|
|||
|
display a prompt and read the next command; if false, <code class="xref py py-meth docutils literal notranslate"><span class="pre">sys.stdout.write()</span></code>
|
|||
|
and <code class="xref py py-meth docutils literal notranslate"><span class="pre">sys.stdin.readline()</span></code> are used. (This means that by importing
|
|||
|
<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 notranslate"><span class="pre">readline</span></code></a>, on systems that support it, the interpreter will automatically
|
|||
|
support <strong class="program">Emacs</strong>-like line editing and command-history keystrokes.)</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
</div>
|
|||
|
<div class="section" id="cmd-example">
|
|||
|
<span id="id2"></span><h2>Cmd Example<a class="headerlink" href="#cmd-example" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>The <a class="reference internal" href="#module-cmd" title="cmd: Build line-oriented command interpreters."><code class="xref py py-mod docutils literal notranslate"><span class="pre">cmd</span></code></a> module is mainly useful for building custom shells that let a
|
|||
|
user work with a program interactively.</p>
|
|||
|
<p>This section presents a simple example of how to build a shell around a few of
|
|||
|
the commands in the <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 notranslate"><span class="pre">turtle</span></code></a> module.</p>
|
|||
|
<p>Basic turtle commands such as <a class="reference internal" href="turtle.html#turtle.forward" title="turtle.forward"><code class="xref py py-meth docutils literal notranslate"><span class="pre">forward()</span></code></a> are added to a
|
|||
|
<a class="reference internal" href="#cmd.Cmd" title="cmd.Cmd"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cmd</span></code></a> subclass with method named <code class="xref py py-meth docutils literal notranslate"><span class="pre">do_forward()</span></code>. The argument is
|
|||
|
converted to a number and dispatched to the turtle module. The docstring is
|
|||
|
used in the help utility provided by the shell.</p>
|
|||
|
<p>The example also includes a basic record and playback facility implemented with
|
|||
|
the <a class="reference internal" href="#cmd.Cmd.precmd" title="cmd.Cmd.precmd"><code class="xref py py-meth docutils literal notranslate"><span class="pre">precmd()</span></code></a> method which is responsible for converting the input to
|
|||
|
lowercase and writing the commands to a file. The <code class="xref py py-meth docutils literal notranslate"><span class="pre">do_playback()</span></code> method
|
|||
|
reads the file and adds the recorded commands to the <code class="xref py py-attr docutils literal notranslate"><span class="pre">cmdqueue</span></code> for
|
|||
|
immediate playback:</p>
|
|||
|
<div class="highlight-python3 notranslate"><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>Here is a sample session with the turtle shell showing the help functions, using
|
|||
|
blank lines to repeat commands, and the simple record and playback facility:</p>
|
|||
|
<div class="highlight-none notranslate"><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">Table of Contents</a></h3>
|
|||
|
<ul>
|
|||
|
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">cmd</span></code> — Support for line-oriented command interpreters</a><ul>
|
|||
|
<li><a class="reference internal" href="#cmd-objects">Cmd Objects</a></li>
|
|||
|
<li><a class="reference internal" href="#cmd-example">Cmd Example</a></li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
|
|||
|
<h4>Previous topic</h4>
|
|||
|
<p class="topless"><a href="turtle.html"
|
|||
|
title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">turtle</span></code> — Turtle graphics</a></p>
|
|||
|
<h4>Next topic</h4>
|
|||
|
<p class="topless"><a href="shlex.html"
|
|||
|
title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">shlex</span></code> — Simple lexical analysis</a></p>
|
|||
|
<div role="note" aria-label="source link">
|
|||
|
<h3>This Page</h3>
|
|||
|
<ul class="this-page-menu">
|
|||
|
<li><a href="../bugs.html">Report a Bug</a></li>
|
|||
|
<li>
|
|||
|
<a href="https://github.com/python/cpython/blob/3.7/Doc/library/cmd.rst"
|
|||
|
rel="nofollow">Show Source
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="clearer"></div>
|
|||
|
</div>
|
|||
|
<div class="related" role="navigation" aria-label="related navigation">
|
|||
|
<h3>Navigation</h3>
|
|||
|
<ul>
|
|||
|
<li class="right" style="margin-right: 10px">
|
|||
|
<a href="../genindex.html" title="General Index"
|
|||
|
>index</a></li>
|
|||
|
<li class="right" >
|
|||
|
<a href="../py-modindex.html" title="Python Module Index"
|
|||
|
>modules</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="shlex.html" title="shlex — Simple lexical analysis"
|
|||
|
>next</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="turtle.html" title="turtle — Turtle graphics"
|
|||
|
>previous</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="language_switcher_placeholder">en</span>
|
|||
|
<span class="version_switcher_placeholder">3.7.4</span>
|
|||
|
<a href="../index.html">Documentation </a> »
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
|
|||
|
<li class="nav-item nav-item-2"><a href="frameworks.html" >Program Frameworks</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-2019, Python Software Foundation.
|
|||
|
<br />
|
|||
|
The Python Software Foundation is a non-profit corporation.
|
|||
|
<a href="https://www.python.org/psf/donations/">Please donate.</a>
|
|||
|
<br />
|
|||
|
Last updated on Jul 13, 2019.
|
|||
|
<a href="../bugs.html">Found a bug</a>?
|
|||
|
<br />
|
|||
|
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 2.0.1.
|
|||
|
</div>
|
|||
|
|
|||
|
</body>
|
|||
|
</html>
|