cli_parser.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import click
  2. def arg_parse(ctx: 'click.Context') -> dict:
  3. # 解析额外参数
  4. extra_kwargs = {}
  5. i = 0
  6. while i < len(ctx.args):
  7. arg = ctx.args[i]
  8. if arg.startswith('--'):
  9. param_name = arg[2:].replace('-', '_') # 转换参数名格式
  10. i += 1
  11. if i < len(ctx.args) and not ctx.args[i].startswith('--'):
  12. # 参数有值
  13. try:
  14. # 尝试转换为适当的类型
  15. if ctx.args[i].lower() == 'true':
  16. extra_kwargs[param_name] = True
  17. elif ctx.args[i].lower() == 'false':
  18. extra_kwargs[param_name] = False
  19. elif '.' in ctx.args[i]:
  20. try:
  21. extra_kwargs[param_name] = float(ctx.args[i])
  22. except ValueError:
  23. extra_kwargs[param_name] = ctx.args[i]
  24. else:
  25. try:
  26. extra_kwargs[param_name] = int(ctx.args[i])
  27. except ValueError:
  28. extra_kwargs[param_name] = ctx.args[i]
  29. except:
  30. extra_kwargs[param_name] = ctx.args[i]
  31. else:
  32. # 布尔型标志参数
  33. extra_kwargs[param_name] = True
  34. i -= 1
  35. i += 1
  36. return extra_kwargs