Ich habe eine Befehlszeilenoption, die ein Argument erfordert. Ich würde gerne "--"
als Argument liefern können, aber ich kann nicht herausfinden, wie es geht.Wie kann ich argarse bekommen, "-" als Argument zu einer Option zu akzeptieren?
Beispielcode: (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))
meine Versuche scheitern Alle zu versuchen "--"
als Argument übergeben:
$ 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 --'
--
Der letzte Fall ist, in der Nähe, aber es schließt den Raum (und ich kann whitespace nicht einfach löschen, denn was, wenn ich " "
als Wert zulassen möchte?). Kann ich das irgendwie erreichen?
Diese argparse zwingt Argument Permutation auf Clients (was zu unnötiger Mehrdeutigkeit führt) ist sehr frustrierend.
(Ich verwende Python 2.7.12.)
Ich rate '- foo = "-" ' –
@ cricket_007 Nein. Druckt '[]'. – jamesdlin
Grundsätzlich denke ich, dass Sie die Anführungszeichen um Ihre Zeichenfolge benötigen. Typische Bash-Programme trennen die Optionen und die restlichen Argumente durch Bindestriche. –