2017-06-07 29 views
1

我已經編寫了這個程序來提供使用標誌--list的選項列表。所以,我想用--list提供所有選項,而當我使用--list --ex時,我只想提供選項列表的一部分。使用argparse添加標誌來提供選項列表

這裏是節目 -

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 

所以,當我這樣做,--list --ex我得到的所有選項,以及外部選。而當我輸入--list --ex時,我只想要外部選項。

在此先感謝您的幫助。

回答

0

在命令行上把--list設置args.listTrue並把--ex在命令行上使得args.exTrue爲好。你的代碼檢查args.list並且看到它是真的,所以它打印出所有選項。然後它檢查args.ex這也是True,因此它打印出外部選項。

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 

我只是在代碼中做了一些小改動,並且能夠實現我想要的,謝謝。