Python argparse set поведение, когда аргументы не предоставлены
Я довольно плохо знаком с Python, и яЯ застрял на том, как структурировать мой простой скрипт при использовании аргументов командной строки.
Цель сценария - автоматизировать некоторые повседневные задачи в моей работе, связанные с сортировкой и обработкой изображений.
Я могу указать аргументы и заставить их вызывать соответствующие функции, но я также хочу установить действие по умолчанию, если аргументы не предоставлены.
Вот'С моей нынешней структурой.
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()
Но когда я не привожу никаких аргументов, ничего не будет вызвано.
Namespace(dimensions=False, interactive=False, list=False)
То, что я хочу, это поведение по умолчанию, если аргументы не предоставлены
if args.list:
func1()
if args.interactive:
func2()
if args.dimensions:
func3()
if no args supplied:
func1()
func2()
func3()
Кажется, это должно быть довольно легко достичь, но яЯ потерял логику того, как обнаружить все аргументы ложные, не просматривая аргументы и не проверяя, все ли ложны.
ОбновитьНесколько аргументов действительны вместе, поэтому я неидти по маршруту элиф.
Обновление 2Вот мой обновленный код с учетом ответа от @unutbu
это нене кажется идеальным, поскольку все заключено в оператор if, но в краткосрочной перспективе я не смогуне могу найти лучшего решения. Я'Я рад принять ответ от @unutbu, любые другие улучшения будут оценены.
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'