argparse Python模块行为的解释:大写占位符来自哪里?

4 投票
2 回答
1829 浏览
提问于 2025-04-16 21:44

我正在尝试第一次写一个命令行界面。在阅读了关于 argparseoptparsegetopt 的资料后,我选择了 argparse,因为在StackOverflow和其他地方都有很多推荐。根据van Rossum先生的一些建议,我搭建了我的第一个命令行界面,代码如下:

def main(argv=None):
    if argv is None:
        argv = sys.argv
    desc = u'some description'
    parser = argparse.ArgumentParser(description=desc)

    parser.add_argument('-s', '--search', help='Search for someone.')
    parser.add_argument('-c', '--do_something_else', help='Do something else.')

    args = parser.parse_args()
    print args

if __name__ == '__main__':
    sys.exit(main())

当我输入 python myscript.py -h 时,结果是:

usage: dblp.py [-h] [-s SEARCH] [-c DO_SOMETHING_ELSE]

some description

optional arguments:
  -h, --help            show this help message and exit
  -s SEARCH, --search SEARCH
                        Search for someone.
  -c DO_SOMETHING_ELSE, --do_something_else DO_SOMETHING_ELSE
                        Do something else.

所以我第一个问题是:为什么 SEARCHDO_SOMETHING_ELSE 要用大写字母写? 第二个问题是:我这样做会违反什么标准吗?有没有更好的方法(或者我可以学习的实际例子)来用Python构建干净且实用的命令行界面? 还有,写命令行界面时,有哪些陷阱是应该避免的?

2 个回答

7

大写字母的项目只是一些值的占位符,它们来自选项的目标。你可以通过 add_argumentmetavar= 参数来指定其他的占位符:

http://docs.python.org/dev/library/argparse.html#metavar

2

这里有几个关于argparse的基础资源,我找到了:

一些关于argparse的幻灯片:
http://www.slideshare.net/tisto/argparse-python-command-line-parser

一个简单的argparse示例:
http://www.rutherfurd.net/tag/argparse/

这是一个真实世界中的argparse示例:
https://github.com/harijay/xtaltools/blob/e683fcef6a5ad7394b87382e58d4dce32a85585b/maskconvert.py

关于避免常见问题,这里有一个看起来不错的argparse封装,可以减少你在一些常见用例中需要写的重复代码:
http://travelingfrontiers.wordpress.com/2010/11/03/simple-python-argparse-wrapper/

撰写回答