2017-06-07 2 views
1

Ich habe dieses Programm geschrieben, um eine Liste von Optionen mit dem Flag --list zur Verfügung zu stellen. Also, ich möchte --list verwenden, um alle Optionen zur Verfügung zu stellen, während ich --list --ex verwende, möchte ich nur einen Teil der Liste der Optionen angeben. HierHinzufügen von Flags mit argparse, um eine Liste von Optionen zur Verfügung zu stellen

ist das Programm -

import argparse 
import sys 
options = { 
    'external': { 
     }, 
    'internal': { 
     } 
} 


def print_list(value): 
    l1 = [] 
    l2 = [] 

    for k, v in options.iteritems(): 
     if k == "external": 
      for opt, val in options["external"].iteritems(): 
       l1.append(opt) 
     elif k == "internal": 
      for opt,val in options["internal"].iteritems(): 
       l2.append(opt) 
    if value == "external": 
     return l1 

    elif value == "internal": 
     return l2 
    elif value == "all": 
     return l1 + l2 

parser = argparse.ArgumentParser(
    description="Testing argparse" 
    ) 

parser.add_argument("--list", action = "store_true") 
parser.add_argument("--ex", action = "store_true") 
parser.add_argument("--in", action = "store_true") 
args = parser.parse_args(sys.argv[1:]) 

if args.list: 
    val = print_list("all") 
    for items in val: 
     print items 

if not args.list and args.ex: 
    parser.error("You need to provide list option") 

if args.ex: 
    val = print_list("external") 
    for items in val: 
     print items 

Also, wenn ich das tue, --list --ex ich alle Optionen zu erhalten, und die externen Optionen. Während ich --list --ex gebe, möchte ich nur die externen Optionen.

Vielen Dank im Voraus für jede Hilfe.

Antwort

0

--list auf der Kommandozeile Putting setzt args.list-True und in der Befehlszeile --ex setzen macht args.exTrue auch. Ihr Code überprüft args.list und sieht, dass es wahr ist, so dass es alle Optionen ausgibt. Dann prüft es args.ex, die auch True ist, so druckt es die externen Optionen aus.

0
if args.list and args.external: 
    val = print_list("external") 
    for items in val: 
     print items 


elif args.list: 
    val = print_list("all") 
    for items in val: 
     print items 

Ich habe nur eine kleine Änderung im Code, und konnte erreichen, was ich wollte, danke.

Verwandte Themen