我有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
答案 0 :(得分:1)
这是什么问题?我个人认为这取决于用例,你的旧系统有一些东西可以说。特别是与subparsers一起使用时。
短划线是默认且通常理解的方式
有一个required=True
参数告诉argparse
需要什么。
对于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
我认为应该按照你的预期工作。