2017-12-16 16 views
1

git commitgit statusなどのサブコマンドは、add_subparsersを使用して​​と簡単に解析できます。コマンドラインから選択された選択肢に対してネストされた設定をどのように入力するのですか?Python 3:初期選択セットのネストされた第2引数を解析する

のは、私はすべてのカスタム設定で音楽を再生したいとしましょう:

play.py --path /path/to.file --duration 100 --filterイコライザはequalizer_settings 1をエコー--effect 2 echo_settings 5​​

ここ

--filter equalizer--effect echoは、最初のレベルの選択肢ですが、私は二引数としてそれらの設定を取得する必要があります。例:echo_settings 5およびequalizer_settings 1 2

セカンダリ設定は、複数の可能性があり、好ましくは名前付き引数を使用します。以下上場

import argparse 
parser = argparse.ArgumentParser(description='Play music the way I want it.') 
parser.add_argument('-p', '--path', type=str, required=True, help='File path') 
parser.add_argument('-d', '--duration', type=int, default=50, help='Play duration') 
parser.add_argument('-f', '--filter', choices=['none', 'equalizer'], default='none', help='Filter selection') 
parser.add_argument('-e', '--effect', choices=['none', 'echo', 'surround'], default='none', help='Effect selection') 

subparsers = parser.add_subparsers(help='Settings of optional parameters') 

equalizer_parser = subparsers.add_parser("equalizer_settings") 
equalizer_parser.add_argument('equalizer_min_range', type=int) 
equalizer_parser.add_argument('equalizer_max_range', type=int) 

echo_parser = subparsers.add_parser("echo_settings") 
echo_parser.add_argument('echo_strength', type=int) 

surround_parser = subparsers.add_parser("surround_settings") 
surround_parser.add_argument('surround_strength', type=int) 

args = parser.parse_args() 
print(args) 

現在 error: unrecognized arguments

答えて

0

でこのエラーはあなただけ、一度にこれらの3 settingsの、すなわち1を1 subparserを使用することができます...私がこれまで持っているものです。順番にいくつかのサブパーザーを使用するいくつかの高度な方法がありますが、私はそこに行きたいとは思いません(以前のSO​​の質問を参照)。

本当にサブパーザを使用する必要がありますか? optionalsのだけではなく、別のセット(フラグの付い)の引数は、何かのようになぜ:

parser.add_argument("--equalizer_settings", nargs=2, type=int) 

parser.add_argument("--echo_settings", type=int) 

parser.add_argument("--surround_strength", type=int 

あなただけのいくつかのパラメータを追加している、アクションコマンドのいくつかの並べ替えを呼び出すことではありません。

+0

私はこれを考えましたが、これを整理するためのよりよい方法があるのだろうかと思っていました。 前の引数から選択した条件に基づいて、必要に応じて引数を作ることはできますか?おそらく、私はこれらを使って回避することができます。 – Joel

+0

条件付きで必要なものを作成する最も簡単な方法は、解析後に共起をチェックすることです。 'parse_args'であるので、すべての' required'チェックが最後のステップとして実行されます。 Subparsersは条件付きで必要な引数のための唯一の組み込みツールです。 – hpaulj

関連する問題