python argparser 问题

2015-02-27 14:33:29 +08:00
 zerh925
做了一个类似工具包一样的py程序,我想让这个工具包达到一些像CLI一样的效果。比如:
python tools foo1 arg1
python tools foo2 [-v] arg1 arg2

大致代码如下:
parser = argparser.ArgumentParser()
parser.add_argument('foo', type=str, choices=['foo1', 'foo2'])
parser.add_argument('-a1', '--arg1')
parser.add_argument('-a2', '--arg2')

用parser.foo来做功能选择,是positional arg。其中foo1要接一个参数,foo2接两个。接的参数是optional args。

现在的问题是,如果是这样写,那么实际效果是:
python tools foo1 -a1 arg1
python tools foo2 -a1 arg1 -a2 arg2

我想在foo1的时候后面跟一个positional arg,foo2的时候后面跟两个positional arg,这样命令中的-a1和-a2就可以省略了。有什么办法吗?
2403 次点击
所在节点    Python
7 条回复
xxr3376
2015-02-27 14:51:15 +08:00
我用click。。
zerh925
2015-02-27 15:01:37 +08:00
@xxr3376 看了一下,感觉还不错
lilydjwg
2015-02-27 18:17:37 +08:00
用 subparser?
dawncold
2015-02-27 22:10:43 +08:00
chilaoqi
2015-02-27 23:38:45 +08:00
argparse的文档看下,用narg应该很容易满足。 但是感觉按照你的需求自己写判断是不是更简单了?
jamiesun
2015-02-27 23:54:48 +08:00
@xxr3376 click好啊
aec4d
2015-03-01 21:45:14 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/173206

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX