オプションのパラメータを使用して、引数の後に位置引数を指定できるかどうか疑問に思いました。理想的には、コマンドラインに入力された最後の引数は常に「testname」に適用されます。
import argparse
parser = argparse.ArgumentParser(description='TAF')
parser.add_argument('-r','--release',nargs='?',dest='release',default='trunk')
parser.add_argument('testname',nargs='+')
args = parser.parse_args()
これらの呼び出しの両方でsmoketestをtestnameに適用したいのですが、2番目の呼び出しでエラーが発生します。
>> python TAF.py -r 1.0 smoketest
>> python TAF.py -r smoketest
TAF.py: error: too few arguments
位置引数を前に移動すると、オプションのパラメーターが正しく動作することを理解していますが、これは私が探している形式ではありません。選択フラグは魅力的な選択肢のように見えますが、一致しないアイテムを無視する代わりにエラーをスローします。
編集:私はこれを回避するためのハッキーな方法を見つけました。誰かがより良い解決策を持っているなら、私はそれをいただければ幸いです。
import argparse
parser = argparse.ArgumentParser(description='TAF')
parser.add_argument('-r','--release',nargs='?',dest='release',default='trunk')
parser.add_argument('testname',nargs=argparse.REMAINDER)
args = parser.parse_args()
if not args.testname:
args.testname = args.release
args.release = ''