Я прочитал Python argparse документацию несколько раз и, должно быть, упустил что-то огромное. Я пытаюсь добавить синтаксис, похожий на make-файл, в мой инструмент cli, но, несмотря на флаг --help
, показывающий мне ожидаемое поведение, ошибки при его выполнении:
test.py
import argparse
import os
def main():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
make_subparser = subparsers.add_parser("make")
make_subparser.add_argument("update", action="store_false", help="Runs all make targets")
make_subparser.add_argument("clean", action="store_false", help="Cleans up everything done previously")
args = parser.parse_args()
if args.update:
os.system("touch test.txt")
elif args.clean:
os.system("rm test.txt")
else:
print("Bad args, see: python test.py make --help.")
if __name__ == "__main__":
main()
Затем в моем терминале:
$> python test.py make --help
usage: test.py make [-h]
positional arguments:
update Runs all make targets
$> python test.py make update
usage: test.py [-h] {make} ...
test.py: error: unrecognized arguments: update
$> # this should make a file
$>
$> python test.py make clean
usage: test.py [-h] {make} ...
test.py: error: unrecognized arguments: clean
$> # this should delete the file
Это прекрасно работает, если я поменяю action="store_false"
на action="store_true"
, но есть дюжина команд make, поэтому я хочу только запустить тот, который пользователь добавляет в cli, если он пытается войти, он должен завершиться.