2017-06-06 51 views
0

这是当前的代码。如何使用带有条件可选参数的python argparse?

import time 
import collections 
from modules import outputs 
from modules import scrub 
from modules import lookups 

parser = argparse.ArgumentParser(description='AppMap Converter to Generate Asset Files from AppMapp Data') 
parser.add_argument("operation", nargs='?', default="empty", help='The operation to perform') 
parser.add_argument("input", nargs='?', default="empty", help='The input AppMapp File Path') 
parser.add_argument("output", nargs='?', default="empty", help='The output Asset File Path') 
args = parser.parse_args() 

start = time.time() 

if(args.operation == "Convert"): 
    input_file_path = args.input 
    output_file_path = args.output 
    #DO LOTS OF STUFF 
else: 
    exit() 

脚本被称为sacsproc,所以我在命令行中运行它,如下所示:

./sacsproc Convert input.csv output.csv 

这一切都工作得很好,问题是,我需要它可以有一个完全更sacsproc命令不同的辅助参数组。即,一个命令可能是:

./sacsproc Clean -rts input.csv output.csv err.csv 

因此,我试图确定如何界定是第一个参数有条件的论据?在我看来,我正在考虑zfs命令行实用程序,这些实用程序正在执行我正在尝试执行的操作(例如,zpool create mirror sdb sdc vs zpool remove sda)。

回答

1

使用subparsers

subparsers = parser.add_subparsers(help="sub-command help") 

group1 = subparsers.add_parser("something",help="do something") 
group1.set_defaults(which="g1") # some default value (so you know which group was activated) 
group1.add_argument("ARG",help='do something on ARG') 

group2 = subparsers.add_parser("other",help="do something else") 
group2.set_defaults(which="g2") # give some default value 
group2.add_argument("ARG",help='do something else on ARG') 

确定...

import argparse 
parser = argparse.ArgumentParser() 
subparsers = parser.add_subparsers(help="sub-command help") 
g1 = subparsers.add_parser("thing1",help="bind to a port and just echo back anything it gets ... with a prompt") 
g1.set_defaults(which="g1") 
g1.add_argument("input",help='the input file') 
g1.add_argument("output",help='the output file') 
g2 = subparsers.add_parser("thing2",help="create a bridge between two ports, this is useful for generating a logfile") 
g2.set_defaults(which="g2") 
g2.add_argument("input",help='thie input file') 
g2.add_argument("output",help='the output file') 
g2.add_argument("error",help="the err file") 


def print_help(args): 
    print "ARGS:",args 
    try: 
     parser.parse_args(args) 
    except: 
     print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n" 

print_help(["-h"]) 
print_help(["thing1","-h"]) 
print_help(["thing2","-h"]) 
+0

感谢,指出我在正确的方向。经过测试,我认为这是有效的,但帮助文件似乎有点过分:$ ./sacsproc CombineAppMapp --help usage:sacsproc ConvertAppMapp [-h] [input] [output] – gunslingor

+0

移动东西我得到了(不是我所期望的):$ ./sacsproc CombineAppMapp --help 用法:sacsproc [操作] ConvertAppMapp [-h] [输入] [输出] – gunslingor

+0

我希望你可以自己连接点,但现在有一个更完整的例子,我想你想要什么... –

相关问题