2016-03-27 5 views
2

Es gibt eine Datei argComp.py in Ubuntu 14.04 LTS. Ich installiere argcomplete 1.0.0 Modul erfolgreich.Wie kann ich Argumente vor der Eingabe automatisch vervollständigen?

chmod +x argComp.py 

und dann

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 

Ich möchte durch Echtzeit die mein Argument lesen, bevor der Benutzer ENTER drückt. Dazu sollte das argcomplete-Modul den Text name in --name name1 lesen und dann die Daten unter name1 überprüfen.

Ich könnte ich Daten bekommen und die - Adressliste machen?

Ich möchte dieses Konzept umzusetzen Browser Realtime Datei ..

Bitte helfen und danken Ihnen im Voraus.

Antwort

0

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.

+0

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 .. –

+0

@HyunjunCheong check my edit. Ich denke, das ist was du willst – MMayla

Verwandte Themen