import argcomplete, argparse
import os
import json
args = os.environ['PY_ARGS'] # get the environment variable
# Parse env variable to dictionary
args_dict = json.loads(args)
# create the top-level parser
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subparser')
# Get keys as list
top_level_keys = list(args_dict.keys()) # [name1, name2]
for i in range(0,len(top_level_keys)):
key = top_level_keys[i] # when i=0 name1
sub_dict = args_dict[key] # when i=0 {"address": ["korea", "Seoul"], "gender": ["Male","Female"]}
sub_parser = subparsers.add_parser(key)
sub_level_keys = list(sub_dict.keys()) # when i=0 [address, gender]
for k in range(0, len(sub_level_keys)):
sub_key = sub_level_keys[k] # when k=0 address
choices = sub_dict[sub_key] # when k=0 [korea, Seoul]
sub_parser.add_argument(' '+sub_key, nargs=1, choices=choices)
argcomplete.autocomplete(parser)
args = parser.parse_args()
# Your code here
print(args)
现在我们可以运行argComp.py
$ ./argComp.py name1 gender Male
Namespace(address=None, gender=['Male'], subparser='name1')
或者有地址
$ ./argComp.py name1 gender Male address korea
Namespace(address=['korea'], gender=['Male'], subparser='name1')
这将打印错误
$ ./argComp.py name2 gender Male address korea
usage: argComp.py name2 [-h] [ address {USA,LA}]
argcomplete2.py name2: error: argument address: invalid choice: 'korea' (choose from 'USA', 'LA')
帮助印刷得很好
$ ./argComp.py -h
usage: argComp.py [-h] {name1,name2} ...
positional arguments:
{name1,name2}
optional arguments:
-h, help show this help message and exit
以及
$ ./argComp.py name1 -h
usage: argComp.py name1 [-h] [ gender {Male,Female}]
[ address {korea,Seoul}]
optional arguments:
-h, help show this help message and exit
gender {Male,Female}
address {korea,Seoul}
很难理解你的要求,但我认为这可能是你想要的:
只有使用argparse管理命令行参数时,
Argcomplete
才有效。在例如,
argComp.py
应该是这样的您可以通过键入来运行
^{pr2}$argComp.py
打印使用情况详细信息
如果您希望它是完全动态的,可以将参数存储为
json
格式,然后将其作为环境变量传递假设我们要解析以下数据(json格式)
然后我们将它存储在一个环境变量中,将其命名为
PY_ARGS
所以在终端:当然,您可以从任何地方设置此环境变量,即另一个程序。在
现在我们的程序
argComp.py
将是现在我们可以运行
argComp.py
或者有地址
这将打印错误
帮助印刷得很好
以及
这里的技巧是从json字符串创建字典并添加subparser(s)。在
可以添加更多子级别以匹配所需的参数结构。在
相关问题 更多 >
编程相关推荐