如何在 ENTER 之前获取自动完成参数?
How can I get autocomplete arguments before ENTER?
Ubuntu 14.04 LTS 中有一个文件 argComp.py
。我成功安装了 argcomplete 1.0.0 模块。
chmod +x argComp.py
然后
data = [ name1 : { address1 : [Korea, Seoul ] }, name2 : { address2 : [ USA, LA ] } ]
./argComp.py --name [tab]
./argComp.py --name
name1 name2
./argComp.py --name name1 --address [tab]
Korea Seoul
我想在用户按下 ENTER 之前实时阅读我的参数。为此,argcomplete 模块应该读取 --name name1
中的文本 name,然后通过 name1
.
检查数据
我可以获取数据并创建 --address 列表吗?
我想将这个概念实现到实时文件浏览器..
请帮忙,提前谢谢你。
有点难以理解您的要求,但我认为这可能是您想要的:
Argcomplete
仅在您使用 argparse 管理命令行参数时有效。
对于你的例子 argComp.py
应该是这样的
#!/usr/bin/env python
# PYTHON_ARGCOMPLETE_OK
import argcomplete, argparse
parser = argparse.ArgumentParser(description='Test passing arguments')
parser.add_argument('--name1', metavar='NAME1', nargs=1, choices=['Korea', 'Seoul'], help="First address line")
parser.add_argument('--name2', metavar='NAME2', nargs=1, choices=['USA', 'LA'], help="Second address line")
argcomplete.autocomplete(parser)
args = parser.parse_args()
# Your code here
# Print the arguments
print(args.name1[0],"-",args.name2[0])
您可以 运行 argComp.py
通过键入
python argComp.py --name1 Korea --name2 LA
打印使用详情
python argComp.py -h
如果您希望它完全动态,您可以将参数存储为 json
格式,然后将其作为环境变量传递
假设我们要解析以下数据(json格式)
'{"name1": {"address": ["korea", "Seoul"], "gender": ["Male","Female"]}, "name2": {"address": ["USA", "LA"]} }'
然后我们将它存储在一个环境变量中,让我们命名它PY_ARGS
所以在终端中:
$ PY_ARGS='{"name1": {"address": ["korea", "Seoul"], "gender": ["Male","Female"]}, "name2": {"address": ["USA", "LA"]} }'
$ export PY_ARGS
当然你可以从任何你想要的地方设置这个环境变量,即另一个程序。
现在我们的程序 argComp.py
将是
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}
这里的技巧是从 json 字符串创建字典并添加 subparser(s).
您可以添加更多子级别以匹配您需要的参数结构。
Ubuntu 14.04 LTS 中有一个文件 argComp.py
。我成功安装了 argcomplete 1.0.0 模块。
chmod +x argComp.py
然后
data = [ name1 : { address1 : [Korea, Seoul ] }, name2 : { address2 : [ USA, LA ] } ]
./argComp.py --name [tab]
./argComp.py --name
name1 name2
./argComp.py --name name1 --address [tab]
Korea Seoul
我想在用户按下 ENTER 之前实时阅读我的参数。为此,argcomplete 模块应该读取 --name name1
中的文本 name,然后通过 name1
.
我可以获取数据并创建 --address 列表吗?
我想将这个概念实现到实时文件浏览器..
请帮忙,提前谢谢你。
有点难以理解您的要求,但我认为这可能是您想要的:
Argcomplete
仅在您使用 argparse 管理命令行参数时有效。
对于你的例子 argComp.py
应该是这样的
#!/usr/bin/env python
# PYTHON_ARGCOMPLETE_OK
import argcomplete, argparse
parser = argparse.ArgumentParser(description='Test passing arguments')
parser.add_argument('--name1', metavar='NAME1', nargs=1, choices=['Korea', 'Seoul'], help="First address line")
parser.add_argument('--name2', metavar='NAME2', nargs=1, choices=['USA', 'LA'], help="Second address line")
argcomplete.autocomplete(parser)
args = parser.parse_args()
# Your code here
# Print the arguments
print(args.name1[0],"-",args.name2[0])
您可以 运行 argComp.py
通过键入
python argComp.py --name1 Korea --name2 LA
打印使用详情
python argComp.py -h
如果您希望它完全动态,您可以将参数存储为 json
格式,然后将其作为环境变量传递
假设我们要解析以下数据(json格式)
'{"name1": {"address": ["korea", "Seoul"], "gender": ["Male","Female"]}, "name2": {"address": ["USA", "LA"]} }'
然后我们将它存储在一个环境变量中,让我们命名它PY_ARGS
所以在终端中:
$ PY_ARGS='{"name1": {"address": ["korea", "Seoul"], "gender": ["Male","Female"]}, "name2": {"address": ["USA", "LA"]} }'
$ export PY_ARGS
当然你可以从任何你想要的地方设置这个环境变量,即另一个程序。
现在我们的程序 argComp.py
将是
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}
这里的技巧是从 json 字符串创建字典并添加 subparser(s).
您可以添加更多子级别以匹配您需要的参数结构。