V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zerh925
V2EX  ›  Python

python argparser 问题

  •  
  •   zerh925 · 2015-02-27 14:33:29 +08:00 · 2384 次点击
    这是一个创建于 3558 天前的主题,其中的信息可能已经有所发展或是发生改变。
    做了一个类似工具包一样的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就可以省略了。有什么办法吗?
    7 条回复    2015-03-01 21:45:14 +08:00
    xxr3376
        1
    xxr3376  
       2015-02-27 14:51:15 +08:00   ❤️ 1
    我用click。。
    zerh925
        2
    zerh925  
    OP
       2015-02-27 15:01:37 +08:00
    @xxr3376 看了一下,感觉还不错
    lilydjwg
        3
    lilydjwg  
       2015-02-27 18:17:37 +08:00
    用 subparser?
    dawncold
        4
    dawncold  
       2015-02-27 22:10:43 +08:00   ❤️ 1
    chilaoqi
        5
    chilaoqi  
       2015-02-27 23:38:45 +08:00
    argparse的文档看下,用narg应该很容易满足。 但是感觉按照你的需求自己写判断是不是更简单了?
    jamiesun
        6
    jamiesun  
       2015-02-27 23:54:48 +08:00
    @xxr3376 click好啊
    aec4d
        7
    aec4d  
       2015-03-01 21:45:14 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5690 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:40 · PVG 09:40 · LAX 17:40 · JFK 20:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.