<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Argparse | Haobin Tan</title><link>https://haobin-tan.netlify.app/tags/argparse/</link><atom:link href="https://haobin-tan.netlify.app/tags/argparse/index.xml" rel="self" type="application/rss+xml"/><description>Argparse</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Wed, 04 Jan 2023 00:00:00 +0000</lastBuildDate><image><url>https://haobin-tan.netlify.app/media/icon_hu7d15bc7db65c8eaf7a4f66f5447d0b42_15095_512x512_fill_lanczos_center_3.png</url><title>Argparse</title><link>https://haobin-tan.netlify.app/tags/argparse/</link></image><item><title>argparse</title><link>https://haobin-tan.netlify.app/docs/coding/python/useful_packages/argparse/</link><pubDate>Wed, 04 Jan 2023 00:00:00 +0000</pubDate><guid>https://haobin-tan.netlify.app/docs/coding/python/useful_packages/argparse/</guid><description>&lt;h2 id="basic-usage">Basic usage&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">argparse&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">get_args_parser&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># set up a parser&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">parser&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">argparse&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ArgumentParser&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">description&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">program_description&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># define parsing rules and operations for different arguments &lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># parser.add_argument()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># ...&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">parser&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;__main__&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">parser&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_parser&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># parse command line &lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">args&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">parser&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parse_args&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># further operations based on parsed arguments&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="add_argument">&lt;code>add_argument()&lt;/code>&lt;/h2>
&lt;p>Parameters:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://docs.python.org/3/library/argparse.html#name-or-flags">name or flags&lt;/a> - Either a name or a list of option strings, e.g. &lt;code>foo&lt;/code> or &lt;code>-f, --foo&lt;/code>.&lt;/li>
&lt;li>&lt;a href="https://docs.python.org/3/library/argparse.html#action">action&lt;/a> - The basic type of action to be taken when this argument is encountered at the command line.&lt;/li>
&lt;li>&lt;a href="https://docs.python.org/3/library/argparse.html#nargs">nargs&lt;/a> - The number of command-line arguments that should be consumed.&lt;/li>
&lt;li>&lt;a href="https://docs.python.org/3/library/argparse.html#const">const&lt;/a> - A constant value required by some &lt;a href="https://docs.python.org/3/library/argparse.html#action">action&lt;/a> and &lt;a href="https://docs.python.org/3/library/argparse.html#nargs">nargs&lt;/a> selections.&lt;/li>
&lt;li>&lt;a href="https://docs.python.org/3/library/argparse.html#default">default&lt;/a> - The value produced if the argument is absent from the command line.&lt;/li>
&lt;li>&lt;a href="https://docs.python.org/3/library/argparse.html#type">type&lt;/a> - The type to which the command-line argument should be converted.&lt;/li>
&lt;li>&lt;a href="https://docs.python.org/3/library/argparse.html#choices">choices&lt;/a> - A container of the allowable values for the argument.&lt;/li>
&lt;li>&lt;a href="https://docs.python.org/3/library/argparse.html#required">required&lt;/a> - Whether or not the command-line option may be omitted (optionals only).&lt;/li>
&lt;li>&lt;a href="https://docs.python.org/3/library/argparse.html#help">help&lt;/a> - A brief description of what the argument does.&lt;/li>
&lt;li>&lt;a href="https://docs.python.org/3/library/argparse.html#metavar">metavar&lt;/a> - A name for the argument in usage messages.&lt;/li>
&lt;li>&lt;a href="https://docs.python.org/3/library/argparse.html#dest">dest&lt;/a> - The name of the attribute to be added to the object returned by &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.parse_args">&lt;code>parse_args()&lt;/code>&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h3 id="name-or-flags">name or flags&lt;/h3>
&lt;p>The &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument">&lt;code>add_argument()&lt;/code>&lt;/a> method must know whether an &lt;strong>optional&lt;/strong> argument, or a &lt;strong>positional&lt;/strong> argument is expected. Therefore, the first arguments passed to &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument">&lt;code>add_argument()&lt;/code>&lt;/a> must be either a series of flags, or a simple argument name.&lt;/p>
&lt;p>&lt;strong>When &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.parse_args">&lt;code>parse_args()&lt;/code>&lt;/a> is called, optional arguments will be identified by the &lt;code>-&lt;/code> prefix, and the remaining arguments will be assumed to be positional.&lt;/strong>&lt;/p>
&lt;p>For example, an optional argument could be created like:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">parser&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">add_argument&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;-f&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;--foo&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>A positional argument could be created like:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">parser&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">add_argument&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;bar&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="action">action&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>The &lt;code>action&lt;/code> keyword argument specifies how the command-line arguments should be&lt;/p>
&lt;/li>
&lt;li>
&lt;p>handled. The supplied actions are:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;code>'store'&lt;/code>&lt;/p>
&lt;p>This just stores the argument’s value.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>'store_const'&lt;/code>&lt;/p>
&lt;p>This stores the value specified by the &lt;a href="https://docs.python.org/3/library/argparse.html#const">const&lt;/a> keyword argument. The &lt;code>'store_const'&lt;/code> action is most commonly used with optional arguments that specify some sort of flag&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>'store_true'&lt;/code> and &lt;code>'store_false'&lt;/code>&lt;/p>
&lt;p>These are special cases of &lt;code>'store_const'&lt;/code> used for storing the values &lt;code>True&lt;/code> and &lt;code>False&lt;/code> respectively. In addition, they create default values of &lt;code>False&lt;/code> and &lt;code>True&lt;/code> respectively.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>'append'&lt;/code>&lt;/p>
&lt;p>This stores a list, and appends each argument value to the list. This is useful to allow an option to be specified multiple times.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>'append_const'&lt;/code>&lt;/p>
&lt;p>This stores a list, and appends the value specified by the &lt;a href="https://docs.python.org/3/library/argparse.html#const">const&lt;/a> keyword argument to the list.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>'count'&lt;/code>&lt;/p>
&lt;p>This counts the number of times a keyword argument occurs.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>'help'&lt;/code>&lt;/p>
&lt;p>This prints a complete help message for all the options in the current parser and then exits. By default a help action is automatically added to the parser.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>'version'&lt;/code>&lt;/p>
&lt;p>This expects a &lt;code>version=&lt;/code> keyword argument in the &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument">&lt;code>add_argument()&lt;/code>&lt;/a> call, and prints version information and exits when invoked&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>'extend'&lt;/code>&lt;/p>
&lt;p>This stores a list, and extends each argument value to the list.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="nargs">nargs&lt;/h3>
&lt;p>The &lt;code>nargs&lt;/code> specifies the number of command-line arguments that should be consumed.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Supported value&lt;/th>
&lt;th>Meaning&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>N&lt;/code>&lt;/td>
&lt;td>The absolute number of arguments (e.g., &lt;code>3&lt;/code>).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>?&lt;/code>&lt;/td>
&lt;td>0 or 1 argument&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>*&lt;/code>&lt;/td>
&lt;td>0 or all arguments&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>+&lt;/code>&lt;/td>
&lt;td>All, and at least one, argument&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="const">const&lt;/h3>
&lt;p>The &lt;code>const&lt;/code> argument of &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument">&lt;code>add_argument()&lt;/code>&lt;/a> is used to hold constant values that are not read from the command line but are required for the various &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser">&lt;code>ArgumentParser&lt;/code>&lt;/a> actions.&lt;/p>
&lt;h3 id="default">default&lt;/h3>
&lt;p>All optional arguments and some positional arguments may be omitted at the command line. The &lt;code>default&lt;/code> keyword argument of &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument">&lt;code>add_argument()&lt;/code>&lt;/a> specifies what value should be used if the command-line argument is not present.&lt;/p>
&lt;h3 id="type">type&lt;/h3>
&lt;p>By default, &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser">&lt;code>ArgumentParser&lt;/code>&lt;/a> objects read command-line arguments in as simple strings. The &lt;code>type&lt;/code> keyword argument of &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument">&lt;code>add_argument()&lt;/code>&lt;/a> allows any necessary type-checking and type conversions to be performed.&lt;/p>
&lt;h3 id="choices">choices&lt;/h3>
&lt;ul>
&lt;li>Some command-line arguments should be selected from a restricted set of values.&lt;/li>
&lt;li>These can be handled by passing a container object as the &lt;em>choices&lt;/em> keyword argument to &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument">&lt;code>add_argument()&lt;/code>&lt;/a>.&lt;/li>
&lt;li>When the command line is parsed, argument values will be checked, and an error message will be displayed if the argument was not one of the acceptable values&lt;/li>
&lt;/ul>
&lt;h3 id="required">required&lt;/h3>
&lt;p>An argument is made required with the &lt;code>required&lt;/code> option. If the required argument is not given, an error will be raised.&lt;/p>
&lt;h3 id="help">help&lt;/h3>
&lt;ul>
&lt;li>The &lt;code>help&lt;/code> value is a string containing a brief description of the argument.&lt;/li>
&lt;li>When a user requests help (usually by using &lt;code>-h&lt;/code> or &lt;code>--help&lt;/code> at the command line), these &lt;code>help&lt;/code> descriptions will be displayed with each argument:&lt;/li>
&lt;/ul>
&lt;h3 id="metavar">metavar&lt;/h3>
&lt;ul>
&lt;li>When &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser">&lt;code>ArgumentParser&lt;/code>&lt;/a> generates help messages, it needs some way to refer to each expected argument.&lt;/li>
&lt;li>By default
&lt;ul>
&lt;li>ArgumentParser objects use the &lt;a href="https://docs.python.org/3/library/argparse.html#dest">dest&lt;/a> value as the “name” of each object.&lt;/li>
&lt;li>for positional argument actions, the &lt;a href="https://docs.python.org/3/library/argparse.html#dest">dest&lt;/a> value is used directly
&lt;ul>
&lt;li>E.g. a single positional argument with &lt;code>dest='bar'&lt;/code> will be referred to as &lt;code>bar&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>for optional argument actions, the &lt;a href="https://docs.python.org/3/library/argparse.html#dest">dest&lt;/a> value is uppercased
&lt;ul>
&lt;li>E.g. A single optional argument &lt;code>--foo&lt;/code> that should be followed by a single command-line argument will be referred to as &lt;code>FOO&lt;/code>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>The &lt;code>metavar&lt;/code> option gives the argument a name to the expected value displayed in error and help outputs.&lt;/p>
&lt;h3 id="dest">dest&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>Most &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser">&lt;code>ArgumentParser&lt;/code>&lt;/a> actions add some value as an attribute of the object returned by &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.parse_args">&lt;code>parse_args()&lt;/code>&lt;/a>. The name of this attribute is determined by the &lt;code>dest&lt;/code> keyword argument of &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument">&lt;code>add_argument()&lt;/code>&lt;/a>.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>For positional argument actions, &lt;code>dest&lt;/code> is normally supplied as the first argument to &lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument">&lt;code>add_argument()&lt;/code>&lt;/a>&lt;/p>
&lt;p>E.g.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">parser&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">add_argument&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;bar&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The value of &lt;code>dest&lt;/code> is &lt;code>bar&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>For optional argument actions, the value of &lt;code>dest&lt;/code> is normally inferred from the option strings.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser">&lt;code>ArgumentParser&lt;/code>&lt;/a> generates the value of &lt;code>dest&lt;/code> by taking the first long option string and stripping away the initial &lt;code>--&lt;/code> string.&lt;/li>
&lt;li>If no long option strings were supplied, &lt;code>dest&lt;/code> will be derived from the first short option string by stripping the initial &lt;code>-&lt;/code> character.&lt;/li>
&lt;li>Any internal &lt;code>-&lt;/code> characters will be converted to &lt;code>_&lt;/code> characters to make sure the string is a valid attribute name.&lt;/li>
&lt;/ul>
&lt;p>E.g.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">parser&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">add_argument&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;-n&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;--name&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">str&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">required&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">help&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Name of the person&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The value of &lt;code>dest&lt;/code> is &lt;code>name&lt;/code>. After calling&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">args&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">parser&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parse_args&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>we can use the argument with &lt;code>args.name&lt;/code>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="example">Example&lt;/h2>
&lt;p>Assume we have a python file &lt;em>&lt;strong>person-info.py&lt;/strong>&lt;/em>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">argparse&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">get_args_parser&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">parser&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">argparse&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ArgumentParser&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">description&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Person info program&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">parser&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">add_argument&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;-n&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;--name&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">str&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">required&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">help&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Name of the person&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">parser&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">add_argument&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;-a&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;--age&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">int&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">required&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">True&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">help&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Age of the person&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">parser&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">add_argument&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;-g&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">metavar&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;gender&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">dest&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;gender&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">default&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;male&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">choices&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;male, female&amp;#34;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">help&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Gender of the person. (male, female)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">parser&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">add_argument&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;-s&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;--single&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dest&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;is_single&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">action&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;store_true&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">help&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Is the person single?&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">parser&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">add_argument&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;-i&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;--interests&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">metavar&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;interests&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">action&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;append&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">help&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Interests of the person&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">parser&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">add_argument&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;-e&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">metavar&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;education&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dest&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;education&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">nargs&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;+&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">help&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;Educational experience of the person&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">parser&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">parser&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_args_parser&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">args&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">parser&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">parse_args&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Name: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Age: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">age&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Gender: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gender&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Is single?: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">is_single&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Interests: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">interests&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Education: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">args&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">education&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>
&lt;p>Print the help information:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">$ python person-info.py -h
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">usage: person-info.py [-h] -n NAME -a AGE [-g gender] [-s] [-i interests]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> [-e education [education ...]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Person info program
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">optional arguments:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -h, --help show this help message and exit
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -n NAME, --name NAME Name of the person
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -a AGE, --age AGE Age of the person
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -g gender Gender of the person. (male, female)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -s, --single Is the person single?
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -i interests, --interests interests
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Interests of the person
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -e education [education ...]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> Educational experience of the person
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Run the script by given necesary arguments:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">$ python person-info.py -n Ecko -a &lt;span class="m">26&lt;/span> -s -i coding -e KIT KIT -i basketball -i fitness
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Name: Ecko
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Age: 26
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Gender: male
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Is single?: True
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Interests: [&amp;#39;coding&amp;#39;, &amp;#39;basketball&amp;#39;, &amp;#39;fitness&amp;#39;]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Education: [&amp;#39;KIT&amp;#39;, &amp;#39;KIT&amp;#39;]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Violation by not given age arguement &lt;code>-a&lt;/code> :&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">python person-info.py -n Ecko -s -i coding -e KIT KIT -i basketball -i fitness
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">usage: person-info.py [-h] -n NAME -a AGE [-g gender] [-s] [-i interests]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> [-e education [education ...]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">person-info.py: error: the following arguments are required: -a/--age
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;h2 id="reference">Reference&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Python documentation: &lt;a href="https://docs.python.org/3/library/argparse.html#module-argparse">&lt;code>argparse&lt;/code>&lt;/a> — Parser for command-line options, arguments and sub-commands&lt;a href="https://docs.python.org/3/library/argparse.html#module-argparse">¶&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="http://zetcode.com/python/argparse/">Python argparse tutorial&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://vra.github.io/2017/12/02/argparse-usage/">argparse简要用法总结&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://pymotw.com/2/argparse/">argparse – Command line option and argument parsing&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul></description></item></channel></rss>