2017-04-24 10 views
0

元々 Python; argparse; how to specify position of positional argumentsで設定されていた質問に戻って、私はなぜこれを行う必要があるのか​​という疑問に答える有効なユースケースに入った。オプションの位置引数の前にオプションの引数値を定義する方法は?

あなたはヘルプから例えばオプションの値とargparseでなんとかですオプションの位置引数、引数と、持っている場合:次に

$ myprog.py --help 
usage: playargs.py [-h] [-i [I]] [positional [positional ...]] 
-----cropped----- 

値なし「-i」フラグを設定する唯一の方法'私'と位置の値を取得するには、 '-i'フラグを最後に配置します。あなたが書くならば、

$ myprog.py -i one two three 

'1'の値は '-i'に避けられません。

:あなたは「1」、「2」と「3」のすべてをしたい場合はpositionalsとして採用されるように、そして唯一の方法は、私はに受け入れられた構文を制限する方法があるはずだと思う

$ myprog.py one two three -i 

を書くことです

playargs.py [positional [positional ...]] [-i [I]] 

オプションの位置引数の前に値 'I'のオプションがあると、その内容が不明瞭になります。

argparseや他のモジュールがあるのでしょうか?

+0

あなたの質問はヘルプテキストの書式についてだけですか? –

+0

いいえ、これは動作を達成することです(このヘルプテキストで説明されています)。 – athanassis

答えて

1

リンクされた質問は約usageの書式設定です。これは、引数が受け入れられるか解析される方法を反映していない

prog [optionals] infile outfile 

:Positionalsは、共通のPOSIXコマンドラインの練習を反映して、ちょうど慣習の問題として、リストの末尾に移動されます。

​​は、設計上、秩序にとらわれないことを試みます。ポジションはそれらの間で順序付けされますが、オプションは任意の順序で、またポジション間でも発生する可能性があります。基本的な構文解析ループは次のとおりです。

loop: 
    handle positionals (up to next optionals flag) 
    handle a optional 
handle remaining positionals 

そして、他の機能はnargsは貪欲であるということです。きみの '?' -iの場合、使用可能な場合は1つの引数が取られます。実際にはre(正規表現)のパターンマッチングを使用します。

​​には、-iの位置に、または位置の後に配置する必要があるというメカニズムはありません。そのためには、基本的な解析ループを変更する必要があります。

もう1つのオプション、または ' - 'は、可変長を終了するための唯一のツールですnargs

prog -i -- 1 2 3 
prog -i -f 1 2 3 # -f is another argument 
prog 1 2 3 -i 4 

optparseには異なる構文解析方法があります。私はそれに精通していないが、それは全体のargvをオプションに渡し、それが望むものを使用できるようにし、残りを解析し続けると信じている。 positionalsは、解析されていない文字列(argparseのextrasparse_known_args)です。

古いUNIXのプラクティスをモデルにした、古いパーサーがいくつかあります。サードパーティのパーザーがたくさんあります。もちろん、sys.argvを直接処理することもできます。

+0

ありがとう、 ' - 'ツールは便利です。私はこれが問題を解決すると思います。 – athanassis

関連する問題