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

したがって、私は1つが最初の引数を条件と引数を定義する方法を決定しようとしていますか?私の考えでは、私がやろうとしているzfsコマンドラインユーティリティについて考えています(例えば、zpoolはミラーsdb sdcとzpoolは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') 

OK ...

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] [入力] [出力] – gunslingor

+0

):$ ./sacsproc CombineAppMapp --help 使用法:sacsproc [操作] ConvertAppMapp [-h] [入力] [出力] – gunslingor

+0

私はあなた自身でドットをつなぐことを望んでいましたが、今ではもっと正確な例がありますあなたが望むものは私が思う... –

関連する問題