<p>只有存在<code>-p</code>参数时,才会使用特殊的<code>action</code>。如果只给它一个<code>-c</code>,则不会使用交叉检查。在</p>
<p>一般来说,检查<code>parse_args</code>(正如<code>Gohn67</code>所建议的那样)之后的交互比使用自定义操作更可靠、更简单。在</p>
<p>如果命令行是<code>'-p remote -c ...'</code>,会发生什么情况?<code>pathAction</code>将在解析并设置<code>-c</code>值之前调用。这就是你想要的吗?只有在给定<code>-p</code>并且是最后一个参数时,您的特殊操作才有效。在</p>
<hr/>
<p>另一个选择是将“组件”设为一个辅助位置。默认情况下,位置是必需的。<code>path</code>和{<cd11>}可以添加到需要它们的子parser中。在</p>
<pre><code>import argparse
parser = argparse.ArgumentParser(description="""This script will clean the old component files.""")
p1 = argparse.ArgumentParser(add_help=False)
p1.add_argument("path", help="path to clean", choices = ["remote", "projects"])
p2 = argparse.ArgumentParser(add_help=False)
p2.add_argument("-d", " delete", help="parameter for deleting the files from the filesystem", nargs='*', default=True)
sp = parser.add_subparsers(dest='component',description="component to clean")
sp.add_parser('hos', parents=[p1,p2])
sp.add_parser('hcr', parents=[p1,p2])
sp.add_parser('mdw', parents=[p2])
sp.add_parser('gui', parents=[p2])
print parser.parse_args()
</code></pre>
<p>样品使用:</p>
^{pr2}$
<p>我使用<code>parents</code>来简化向多个子parser添加参数的过程。我将<code>path</code>设置为一个位置,因为它是必需的(对于2个子parser)。在这些情况下,<code> path</code>只会让用户输入更多。对于<code>nargs='*'</code>,<code> delete</code>必须属于子parser,这样它才能最后出现。如果它的<code>nargs</code>是固定的(<code>None</code>或数字),那么它可能是<code>parser</code>的一个参数。在</p>