2017-04-26 24 views
1

ここで私の問題を単純化しています。私はこれを実行する必要があります。Python argparseは文字列オプションを " - "で始まらない

python test.py --arg1 '--no-route53' 

私はこのようなパーサを追加しました:私は、文字列全体として「--no-route53」を取得し、私のスクリプトで、後でそれを使用したい

parser.add_argument("--arg1", nargs="?", type=str, help="option") 
args = parser.parse_args() 

を。しかし、私はこのエラーが発生し続ける:

test.py: error: unrecognized arguments: --no-route53 

どうすれば回避できますか?

UPDATE1:私はこのような、「--no-route53」の後に余分なスペースを与え、それが働いていた場合:

python test.py --arg1 '--no-route53 ' 
+2

使用引数の値の前に平等シンボル 'のpython test.py --arg1 = ' - – jpnkls

+0

無route53''その文字列は、オプションフラグのように見えます。 argparseでは、解釈は前のオプションの引数として扱うことよりも優先されます。シェルは余分な引用符を保持しません。 – hpaulj

答えて

0

を私はしばらく前に正確に同じ問題がありました。私が終わった前の解析sys.argvリスト:

def bug_workaround(argv): 
    # arg needs to be prepended by space in order to not be interpreted as 
    # an option 
    add_space = False 
    args = [] 
    for arg in argv[1:]: # Skip argv[0] as that should not be passed to parse_args 
     if add_space: 
      arg = " " + arg 
     add_space = True if arg == "--args" else False 
     args.append(arg) 

    return args 


parser = argparse.ArgumentParser(description='My progrm.') 
. 
. 
. 
parser.add_argument('--args', type=str, 
        help='Extra args (in "quotes")') 

args = parser.parse_args(bug_workaround(sys.argv)) 
# Prune added whitespace (for bug workaround) 
if args.args: 
    args.args = args.args[1:] 
+0

私が見ている最も簡単な方法は、 "="を追加することです:python3 test.py --arg1 = ' - no-route53' –

+0

はい、しかし、これはユーザーに注意する必要があります。それは必ずしもそうではありません。 – JohanL

関連する問題