python可选参数位置_python – argparse可选参数在位置参数之前

documentation所述:

'?'. One argument will be consumed from the command line if possible,

and produced as a single item. If no command-line argument is present,

the value from default will be produced. Note that for optional

arguments, there is an additional case – the option string is present

but not followed by a command-line argument. In this case the value

from const will be produced.

所以,你想要的行为是不能使用’?’获得的.也许你可以用argparse.Action写一些hack,并用以前的结果进行干预(1)

我认为更好的解决方案是拆分该选项的功能.使它成为需要参数的选项(但是选项本身是可选的),并添加一个没有参数的选项,将释放设置为“trunk”.以这种方式,您可以获得相同的结果,没有任何黑客.我也觉得界面比较简单.

在你的例子中:

python TAF.py -r smoketest

很清楚,smoketest将被解释为-r的参数.至少遵循unix约定.如果你想保持nargs =’?’那么用户必须使用 – :

$python TAF.py -r -- sometest

Namespace(release=None, testname=['sometest']) #parsed result

(1)关于如何做到这一点的想法:检查该选项是否有参数.如果它有一个检查是否是有效的测试名称.如果这样放入到testname并将释放设置为默认值.你也必须设置一个“标志”,告诉你这件事情发生了.

现在,在解析sys.argv之前,您必须重定向sys.stderr.在进行解析时,您必须抓取SystemExit,检查stderr,看看错误是否“太少参数”,检查标志是否设置,如果忽略该错误并继续运行,否则您应该重新打印到原始的stderr错误消息并退出.

这种方法看起来并不健壮,这可能是错误的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值