He creado una aplicación cli usando la biblioteca de clics en python. No hay documentación sobre cómo depurar comandos.
Sin hacer clic, es fácil simplemente depurar archivos de python en IDE, pero cuando usamos clic, los comandos deben ejecutarse a través de la configuración de console_scripts en setup.py.
Esto no está bien documentado, pero puede llamar a sus funciones de comando directamente y, por lo tanto, puede ejecutar el código en un depurador:
Código de muestra:
import click @click.command() @click.option('--my_arg', default=1, help='a number') def my_command(my_arg): click.echo("my_arg='%d'" % my_arg) if __name__ == '__main__': my_command(['--my_arg', '3'])Resultado:
my_arg='3'Llegué un par de años tarde a la fiesta, pero en caso de que alguien más venga aquí buscando una respuesta como acabo de hacer:
Llamar a su función con CliRunner.invoke() devolverá un objeto "Resultado" con un atributo "exc_info". Puede enviar eso a traceback.print_exception() así:
runner = CliRunner() result = runner.invoke(my_command) traceback.print_exception(*result.exc_info)El setup.py genera:
de la línea de comandos:
console_app --helpse expande al cmd de configuración IDE:
python <absolute path to>\console_app-script.py --helpProbado en PyCharm 2018.2: puede establecer y alcanzar puntos de interrupción y conservar el paradigma cmdline/arg esperado.