ポジション引数またはオプションの引数として渡す必要のあるコマンドライン引数が必要です。たとえば、次のいずれかの呼び出しから同じアクションを実行したいとします。argparse:同じ必須引数をポジションORにする
prog 10
prog -10
prog -n 10
prog --num 10
これはargparseで可能ですか?
インタラクティブセッションで:私は合理的な近似を作成することができ、相互に排他的なグループと
ポジション引数またはオプションの引数として渡す必要のあるコマンドライン引数が必要です。たとえば、次のいずれかの呼び出しから同じアクションを実行したいとします。argparse:同じ必須引数をポジションORにする
prog 10
prog -10
prog -n 10
prog --num 10
これはargparseで可能ですか?
インタラクティブセッションで:私は合理的な近似を作成することができ、相互に排他的なグループと
In [10]: parser=argparse.ArgumentParser()
In [11]: grp=parser.add_mutually_exclusive_group(required=True)
In [12]: a=grp.add_argument('pos',nargs='?',type=int,default=0)
In [13]: b=grp.add_argument('-n','--num')
grp
は任意optionalsの数と1つのオプションの位置を含むことができます。違いを強調しただけのポジションに別のtype
を選びました。必要
In [16]: parser.parse_args(['-n10'])
Out[16]: Namespace(num='10', pos=0)
In [17]: parser.parse_args(['--num=10'])
Out[17]: Namespace(num='10', pos=0)
In [18]: parser.parse_args(['--num','10'])
Out[18]: Namespace(num='10', pos=0)
試験グループ独占
In [25]: parser.parse_args(['--num=20','10'])
usage: ipython3 [-h] [-n NUM] [pos]
ipython3: error: argument pos: not allowed with argument -n/--num
グループ:
だけ位置値:任意の
In [14]: parser.parse_args(['10'])
Out[14]: Namespace(num=None, pos=10)
様々な形態
In [26]: parser.parse_args([])
usage: ipython3 [-h] [-n NUM] [pos]
ipython3: error: one of the arguments pos -n/--num is required
私は同じ位置に同じdest
を付けることを実験しました - したがって、両方ともnum
に書きます。しかし、これがデフォルトでdest
を書く上での位置になり
In [19]: a.dest
Out[19]: 'pos'
In [20]: a.dest='num'
In [21]: parser.parse_args(['--num','10'])
Out[21]: Namespace(num=0)
郵便解析するコードが今まで道理にかなっているものの中にargs.pos
とargs.num
値を処理する必要があります(必要であれば、私は詳細を追加することができます)。
'-10
'の入力は処理できません。
parser.add_argument('-1')
をしかし、結果はあなたが望むものはおそらくない:まあ、私は定義することができ
は全体的に、この要件はあなたのために物事が不必要に困難なプログラマになります。
ご回答ありがとうございます。私は '-10'形式の無駄についてあなたに同意します。私は投稿時にUNIXの 'tail'コマンドについて考えていましたが、それは非常に特殊な使い方であり、最後に余分なコーディングを行う価値はありません。私はあなたが提案したように相互排他的なグループの使用を考えましたが、それは位置とオプションの引数の明確な区別の 'argparse'の哲学(私はあまり好きではありません)を回避する方法です。結局、私が 'argparse'を保つことにしたら、オプションの引数形式(' -n'、 '--num')だけを使うつもりです。 – beppe