Es ist ein bisschen schwer zu verstehen, was Sie fragen, aber ich denke, das könnte das sein, was Sie wollen:
Argcomplete
funktionieren nur, wenn Sie argparse verwenden Ihre Befehlszeilenargumente zu verwalten.
Für Ihr Beispiel argComp.py
sollte so etwas wie dieses
#!/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])
Sie können
python argComp.py --name Korea --name2 LA
Um Nutzungsdetails
python argComp.py -h
argComp.py
ausgeführt werden gedruckt, indem Sie Wenn Sie es wollen, voll dynamisch sein Sie Ihre Argumente in json
Format speichern kann, dann übergeben Sie es als Umgebungsvariable
können sagen, dass wir die folgenden Daten (JSON-Format)
'{"name1": {"address": ["korea", "Seoul"], "gender": ["Male","Female"]}, "name2": {"address": ["USA", "LA"]} }'
analysieren wollen, dann werden wir speichern sie in einer Umgebungsvariablen, können Name es PY_ARGS
so in der Klemme:
$ PY_ARGS='{"name1": {"address": ["korea", "Seoul"], "gender": ["Male","Female"]}, "name2": {"address": ["USA", "LA"]} }'
$ export PY_ARGS
natürlich können Sie diese Umgebungsvariable von jedem Ort festlegen können Sie eine weitere progra also wollen m.
Jetzt wird unser Programm argComp.py
sein
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)
Jetzt können wir argComp.py
$ ./argComp.py name1 --gender Male
Namespace(address=None, gender=['Male'], subparser='name1')
Oder mit Adresse
$ ./argComp.py name1 --gender Male --address korea
Namespace(address=['korea'], gender=['Male'], subparser='name1')
Dieser Fehler wird gedruckt laufen
$ ./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')
Hilfe ist schön
gedruckt
$ ./argComp.py -h
usage: argComp.py [-h] {name1,name2} ...
positional arguments:
{name1,name2}
optional arguments:
-h, --help show this help message and exit
und
$ ./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}
Der Trick hier ist Wörterbuch aus dem JSON-String zu erstellen und subparser(s) hinzuzufügen.
Sie können weitere Unterebenen hinzufügen, um der benötigten Argumentstruktur zu entsprechen.
Danke .. Aber ich meine, wenn es keinen Datensatz gibt. Wie könnte ich das Argument im Puffer bekommen und dieses Argument für das Überprüfen von Daten in Echtzeit verwenden Ich drücke [TAB] bevor ich [ENTER] ... Ihr Beispiel ist absoluter Pfad. Mein Datensatz ist nur ein Beispiel .. –
@HyunjunCheong check my edit. Ich denke, das ist was du willst – MMayla