4

我正在尝试编写一个命令行界面(第一次),在阅读了 about 之后,argparse我之所以选择这里是因为这里有一些关于 SO 和网络中其他地方的建议。根据 van Rossum 先生的一些建议,我将我的第一个命令行界面连接起来,如下所示:optparsegetoptargparse

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 构建干净且有用的命令行界面?在编写 cmd 接口时是否应该避免一些陷阱?

4

2 回答 2

7

大写字母项目只是价值占位符;它们取自选项的目的地。metavar=您可以通过以下参数指定替代占位符add_argument

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

于 2011-07-18T01:52:43.530 回答
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-包装/

于 2011-07-18T03:44:32.470 回答