No se puede registrar el comando de grupo.
Estoy tratando de ejecutar un cli de click a través de un bash con grupos de comandos diferentes ejecutados mediante una sola colección de comandos.
import click
@click.group()
def run_preprocessing_extract_data():
pass
@run_preprocessing_extract_data.command()
@click.option(
"--start_date",
type=click.DateTime(formats=["%Y-%m-%d"]),
required=True,
help="Fecha de inicio para el pipeline",
)
@click.option(
"--end_date",
type=click.DateTime(formats=["%Y-%m-%d"]),
required=True,
help="Fecha de fin para el pipeline",
)
def main(start_date, end_date):
...
if __name__ == "__main__":
main()
from click import CommandCollection
from src.preprocessing_extract_data.scripts.main import run_preprocessing_extract_data
if __name__ == "__main__":
cmds = [
run_preprocessing_extract_data,
# unos cuantos grupos de comandos similares más
]
cli = CommandCollection(sources=cmds)
cli()
#!/bin/sh
start_date="$1"
end_date="$2"
python src/scripts/main.py run_preprocessing_extract_data --start_date=$start_date --end_date=$end_date
Ejecuto el siguiente comando ./scripts/entrypoint.sh --start_date="2020-11-01" --end_date="2021-12-01" --today="2021-12-10"
, pero sigue fallando y arroja el siguiente error:
Usage: main.py [OPTIONS] COMMAND [ARGS]…
Try ‘main.py –help’ for help.
Error: No such command ‘run_preprocessing_extract_data’.
davy.ai
El error está ocurriendo porque el comando “run_preprocessing_extract_data” es parte del grupo click, pero no se está pasando como argumento al script main.py. En cambio, el script está intentando ejecutarlo como un comando separado.
Para solucionar esto, modifica el script entrypoint.sh para pasar la colección de comandos como argumento al script main.py, de esta manera:
debe convertirse en:
Con este cambio, el script main.py debería analizar correctamente los argumentos de entrada y ejecutar el grupo de comandos “run_preprocessing_extract_data”.