Python argparse definir comportamento quando nenhum argumento fornecido
Sou relativamente novo em Python e estou preso em como estruturar meu script simples ao usar argumentos de linha de comando.
O objetivo do script é automatizar algumas tarefas diárias no meu trabalho relacionadas à classificação e manipulação de imagens.
Eu posso especificar os argumentos e fazê-los chamar as funções relevantes, mas também quero definir uma ação padrão quando nenhum argumento é fornecido.
Aqui está minha estrutura atual.
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()
Mas quando eu não fornecer argumentos, nada será chamado.
Namespace(dimensions=False, interactive=False, list=False)
O que eu quero é algum comportamento padrão se nenhum argumento for fornecido
if args.list:
func1()
if args.interactive:
func2()
if args.dimensions:
func3()
if no args supplied:
func1()
func2()
func3()
Isto parece que deve ser bastante fácil de conseguir, mas estou perdido na lógica de como detectar todos os argumentos que são falsos sem repetir os argumentos e testar se todos são falsos.
AtualizarMúltiplos argumentos são válidos juntos, é por isso que eu não desci a rota Elif.
Atualização 2Aqui está o meu código atualizado, tendo em conta a resposta do @unutbu
não parece ideal, pois tudo está envolto em uma declaração if, mas no curto prazo não consegui encontrar uma solução melhor. Estou feliz em aceitar a resposta da @unutbu, quaisquer outras melhorias oferecidas serão apreciadas.
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'