У меня есть опция командной строки, которая требует аргумента. Я хотел бы иметь возможность поставить "--"
в качестве аргумента, но я не могу понять, как это сделать.Как я могу заставить argparse принять «-» как аргумент опции?
Пример кода: (test-argparse.py
)
#!/usr/bin/env python
from __future__ import print_function
import argparse
import sys
def main(argv):
ap = argparse.ArgumentParser()
ap.add_argument("-x", "--foo", metavar="VALUE", default="",
help="Test option.")
args = ap.parse_args(argv[1:])
print(args.foo)
if __name__ == "__main__":
sys.exit(main(sys.argv))
Все мои попытки попробовать пройти "--"
в качестве аргумента не в состоянии:
$ test-argparse.py --foo --
usage: test-argparse.py [-h] [-x VALUE]
test-argparse.py: error: argument -x/--foo: expected one argument
$ test-argparse.py --foo -- --
usage: test-argparse.py [-h] [-x VALUE]
test-argparse.py: error: argument -x/--foo: expected one argument
$ test-argparse.py --foo=--
[]
$ test-argparse.py --foo=-- --
usage: test-argparse.py [-h] [-x VALUE]
test-argparse.py: error: unrecognized arguments: --
$ test-argparse.py --foo="--"
[]
$ test-argparse.py '--foo --'
usage: test-argparse.py [-h] [-x VALUE]
test-argparse.py: error: unrecognized arguments: --foo --
$ test-argparse.py -x--
[]
$ test-argparse.py '-x --'
--
Последний случай ближе, но она включает в себя пространство (и я не могу просто удалить пробелы, потому что, если я хочу разрешить " "
в качестве значения?). Есть ли способ, которым я могу это сделать?
Этот аргумент перестановки аргументов на клиентах (что приводит к ненужной двусмысленности) очень расстраивает.
(Я использую Python 2.7.12.)
Я угадываю '--foo =" - "' –
@ cricket_007 Нет. Печатает '[]'. – jamesdlin
В принципе, мне кажется, вам нужны кавычки вокруг вашей строки. Типичные программы bash разделяют параметры и оставшиеся аргументы с тире. –