python argparse不接受字符串选项以“ - ”开头

时间:2017-04-26 06:46:37

标签: python argparse

我在这里简化了我的问题。我需要这样做:

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

我添加了这样的解析器:

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

我想把'--no-route53'作为整个字符串,稍后在我的脚本中使用它。但我一直收到这个错误:

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

我该如何解决它?

UPDATE1:如果我在'--no-route53'之后给出额外的空格,就像这样,它起作用了:

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

1 个答案:

答案 0 :(得分: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:]