Kurze Antwort
Wie bereits in den beiden vorangegangenen Antworten gezeigt, können Sie ein optionales Positionsargument mit nargs='?'
. Sie könnten das Argument auch direkt in eine Path
eingeben und/oder den cwd auf .
wenn Sie das wollten:
meineDatei.py
import argparse
import pathlib
parser = argparse.ArgumentParser()
parser.add_argument("dir", nargs="?", default=".", type=pathlib.Path)
parsed_args = parser.parse_args()
print("Installing to", parsed_args.dir.resolve())
$ python myfile.py
Installing to /users/myname/myfolder
$ python myfile.py /usr/bin/
Installing to /usr/bin
Längere Antwort
Da Sie auch die Wahr/Falsch-Optionen im Flaggenstil erwähnen -h
y -v
in Ihrer Frage, können diese Beispiele von Nutzen sein:
Flaggen (z.B. -v
)
Optionale Optionen, die keine Argumente benötigen, können wir als "Flags" bezeichnen. Bei Flags interessiert uns nur, ob sie gegeben sind oder nicht. -h
ist ein Flag, das argparse automatisch hinzufügt (zusammen mit der längeren Version --help
), also sollten wir das nicht wirklich außer Kraft setzen. Wenn wir berücksichtigen -v
dann,
meineDatei.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
"-v",
"--version",
action="store_true")
parsed_args = parser.parse_args()
if parsed_args.version:
print("version flag given")
else:
print("version flag not given")
Beachten Sie, dass das zweite Argument von add_argument()
ist ein längerer Name für diese Option. Sie ist nicht obligatorisch, aber sie macht Ihren nachfolgenden Code lesbarer ( parsed_args.version
gegen parsed_args.v
) und macht die Aufrufe an Ihr Installationsprogramm deutlicher.
$ python myfile.py -v
version flag given
$ python myfile.py --verbose
version flag given
$ python myfile.py
version flag not given
Optionale Argumente (z. B. --installdir /usr/bin/
)
Man könnte argumentieren, dass Sie in Ihrem Fall mit einem fakultativen Argument besser dran wären als mit einem positionsbezogenen.
meineDatei.py
import argparse
import pathlib
parser = argparse.ArgumentParser()
parser.add_argument(
"-i",
"--installdir", # Optional (but recommended) long version
type=pathlib.Path,
default="/bin"
)
parsed_args = parser.parse_args()
print("Installing to", parsed_args.installdir)
$ python myfile.py -i /usr/bin/
Installing to /usr/bin
$ python myfile.py -installdir /usr/bin/
Installing to /usr/bin
$ python myfile.py
Installing to /bin