zachowanie Pythona argparse, gdy nie podano argumentów
Jestem dość nowy w pythonie i utknąłem na tym, jak skonstruować mój prosty skrypt podczas używania argumentów wiersza poleceń.
Celem skryptu jest automatyzacja niektórych codziennych zadań związanych z sortowaniem i manipulowaniem obrazami.
Mogę określić argumenty i skłonić je do wywołania odpowiednich funkcji, ale chcę też ustawić akcję domyślną, gdy nie podano żadnych argumentów.
Oto moja obecna struktura.
parser = argparse.ArgumentParser()
parser.add_argument("-l", "--list", help="Create CSV of images", action="store_true")
parser.add_argument("-d", "--dimensions", help="Copy images with incorrect dimensions to new directory", action="store_true")
parser.add_argument("-i", "--interactive", help="Run script in interactive mode", action="store_true")
args = parser.parse_args()
if args.list:
func1()
if args.interactive:
func2()
if args.dimensions:
func3()
Ale kiedy nie podaję żadnych argumentów, nic nie zostanie wywołane.
Namespace(dimensions=False, interactive=False, list=False)
To, czego chcę, to zachowanie domyślne, jeśli nie podano argumentów
if args.list:
func1()
if args.interactive:
func2()
if args.dimensions:
func3()
if no args supplied:
func1()
func2()
func3()
Wydaje się, że powinno to być dość łatwe do osiągnięcia, ale jestem zagubiony w logice tego, jak wykrywać wszystkie argumenty są fałszywe bez przechodzenia przez argumenty i testowania, jeśli wszystkie są fałszywe.
AktualizacjaWiele argumentów jest razem ważnych, dlatego nie poszedłem drogą elif.
Aktualizacja 2Oto mój zaktualizowany kod uwzględniający odpowiedź z @unutbu
nie wydaje się to idealne, ponieważ wszystko jest zapakowane w oświadczenie if, ale w krótkim czasie nie mogłem znaleźć lepszego rozwiązania. Cieszę się, że mogę zaakceptować odpowiedź z @unutbu, wszystkie inne oferowane ulepszenia będą mile widziane.
lists = analyseImages()
if lists:
statusTable(lists)
createCsvPartial = partial(createCsv, lists['file_list'])
controlInputParital = partial(controlInput, lists)
resizeImagePartial = partial(resizeImage, lists['resized'])
optimiseImagePartial = partial(optimiseImage, lists['size_issues'])
dimensionIssuesPartial = partial(dimensionIssues, lists['dim_issues'])
parser = argparse.ArgumentParser()
parser.add_argument(
"-l", "--list",
dest='funcs', action="append_const", const=createCsvPartial,
help="Create CSV of images",)
parser.add_argument(
"-c", "--convert",
dest='funcs', action="append_const", const=resizeImagePartial,
help="Convert images from 1500 x 2000px to 900 x 1200px ",)
parser.add_argument(
"-o", "--optimise",
dest='funcs', action="append_const", const=optimiseImagePartial,
help="Optimise filesize for 900 x 1200px images",)
parser.add_argument(
"-d", "--dimensions",
dest='funcs', action="append_const", const=dimensionIssuesPartial,
help="Copy images with incorrect dimensions to new directory",)
parser.add_argument(
"-i", "--interactive",
dest='funcs', action="append_const", const=controlInputParital,
help="Run script in interactive mode",)
args = parser.parse_args()
if not args.funcs:
args.funcs = [createCsvPartial, resizeImagePartial, optimiseImagePartial, dimensionIssuesPartial]
for func in args.funcs:
func()
else:
print 'No jpegs found'