使用argparse需要解释如何正确使用它

时间:2013-10-29 16:36:28

标签: python django argparse

我有3个问题。

1)。我希望能够使用这个python命令行程序而不必担心参数的顺序。之前我正在使用sys.argv并让我的用户使用这样的脚本: mypyscript.py create indexname http://localhost:9260 clientMap.json 这要求我的用户记住订单。 我想要这样的东西: mypyscript.py -i indexname -c create -f clientMap.json -u http://localhost:9260 请注意我是如何破坏订单的。

2)。我将使用我的程序中的命令行变量作为条件逻辑     在我的代码?我需要通过args.command-type访问它吗?破折号好吗?

3)。只有file-to-index是可选参数。我可以传递add_argument一些可选= True参数或什么?我该如何处理?

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-c","--command-type", help="The command to run against ElasticSearch are one of these: create|delete|status")
parser.add_argument("-i","--index_name", help="Name of ElasticSearch index to run the command against")
parser.add_argument("-u", "--elastic-search-url", help="Base URl of ElasticSearch")
parser.add_argument("-f", "--file_to_index", default = 'false', help="The file name of the index map")

args = parser.parse_args()


print args.elastic_search_url

1 个答案:

答案 0 :(得分:1)

  1. 这是什么问题?我个人认为这取决于用例,你的旧系统有一些东西可以说。特别是与subparsers一起使用时。

  2. 短划线是默认且通常理解的方式

  3. 有一个required=True参数告诉argparse需要什么。

  4. 对于command-type,我建议您使用choices参数,以便将其自动约束为create,delete,status

    此外,对于网址,您可以考虑添加正则表达式进行验证,您可以使用type参数添加它。

    这是我的论证代码版本:

    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '-c',
        '--command-type',
        required=True,
        help='The command to run against ElasticSearch',
        choices=('create', 'delete', 'status'),
    )
    parser.add_argument(
        '-i',
        '--index_name',
        required=True,
        help='Name of ElasticSearch index to run the command against',
    )
    parser.add_argument(
        '-u',
        '--elastic-search-url',
        required=True,
        help='Base URl of ElasticSearch',
    )
    parser.add_argument(
        '-f',
        '--file_to_index',
        type=argparse.FileType(),
        help='The file name of the index map',
    )
    
    
    args = parser.parse_args()
    
    print args
    

    我认为应该按照你的预期工作。