code: def get_sub_commands(parser: argparse.ArgumentParser) -> List[str]:
      
      sub_cmds = []
  
      # Check if this is parser has sub-commands
      if parser is not None and parser._subparsers is not None:
  
          # Find the _SubParsersAction for the sub-commands of this parser
          for action in parser._subparsers._actions:
              if isinstance(action, argparse._SubParsersAction):
                  for sub_cmd, sub_cmd_parser in action.choices.items():
                      sub_cmds.append(sub_cmd)
  
                      # Look for nested sub-commands
                      for nested_sub_cmd in get_sub_commands(sub_cmd_parser):
                          sub_cmds.append('{} {}'.format(sub_cmd, nested_sub_cmd))
  
                  break
  
      sub_cmds.sort()
      return sub_cmds
docs: Get a list of sub-commands for an ArgumentParser