擅长:python、mysql、java
<p>在<code>argparse</code>和早期的相同样式的命令行处理程序中,“optionals”或标记的参数与位置参数之间存在区别。</p>
<p>“optionals”由标志字符串表示,类似于<code>-f</code>或<code>--foo</code>。它们类似于Python函数的关键字参数,但不完全相同。顺序无关紧要。使用in-limits,标志可以连接到值,例如<code>-f1</code>,<code>--foo=astring</code>。</p>
<p>“位置”是按顺序标识的,没有任何标识名称。它们类似于Python函数的<code>args</code>。在函数中,所有位置参数都必须出现在关键字参数之前。使用<code>argparse</code>“optionals”可以与“positional”混合使用,但有一些限制。通常在选项之后提供所有位置,如<code>argparse</code>用法消息中所示。</p>
<p>看看<code>argparse</code>文档中的示例。</p>
<p>我们周期性地从那些想要绕过这些约定的人那里得到问题,例如希望使用不带前缀字符的flag,或者输入类似字典的对<code>foo=test</code>或<code>foo:test</code>。有些是可能的,但需要更多的工作。而且通常在清晰度和实用性方面没有什么好处。</p>
<p>我建议将<code>script.py name = david</code>传递给只显示<code>sys.argv</code>列表的脚本。这些是<code>argparse</code>必须使用的值。我希望你会看到:</p>
<pre><code>['script.py', 'name', '=', 'david']
</code></pre>
<p>您的shell已将命令行拆分为单独的字符串。对这个列表进行自己的解析可能比将<code>argparse</code>扭曲成一个可以解析的表单要容易得多。</p>
<p>Argparse可以很容易地处理如下输入</p>
<pre><code>script.py --name david
script.py --name=david
script.py david
</code></pre>