2017-06-06 93 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

我希望你可以自己連接點,但現在有一個更完整的例子,我想你想要什麼... –

相關問題