<p>或许,最接近的解决方案是:</p>
<pre><code>import argparse
import sys
print(sys.argv)
parser = argparse.ArgumentParser()
parser.add_argument('-k', ' keyvalue')
parser.add_argument('-v', ' verbose', action='store_true')
parser.add_argument('-d', ' data')
parser.add_argument('-f', ' file')
parser.add_argument('pos1', choices = ['help', 'get', 'post'])
parser.add_argument('pos2')
args = parser.parse_args()
print(args)
</code></pre>
<p>由此产生的帮助是:</p>
^{pr2}$
<p>合身并不完美。例如,您可以只提供<code>help</code>,但可以只提供<code>-h</code>。第二个位置值可以是任何字符串、“get”、有效的url或其他内容。你自己的代码必须有效。<code>key:value</code>位需要您自己的解析。在</p>
<p>在<code>argparse</code>解析方法中,<code>optionals</code>可以以任何顺序出现。这两个位置必须按给定的顺序出现(彼此相对)。在</p>
<hr/>
<p>在较新的python中,我可以将最后一个位置改为“optional”,并使用新的<code>intermixed</code>解析器。这样我就可以“帮助”(或“得到”):</p>
<pre><code>parser.add_argument('pos2', nargs='?')
args = parser.parse_intermixed_args()
</code></pre>
<p>如果两个位置值用标志分隔,则需要<code>intermixed</code>。由于某些复杂的原因,常规解析可能会使用“?”参数过早地留给您一个额外的无法识别的字符串。在</p>
<p>另一种方法是定义所有标记的参数,并使用<code>parse_known_args</code>。非标志值将在<code>extras</code>列表中,您可以根据需要对其进行分析。像<code>optparse</code>这样的旧解析器本质上就是这样做的。<code>argparse</code>还添加了处理位置参数的有限能力,但严格按位置,而不是按值。在</p>