Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def do_help(self, arglist):
"""List available commands with "help" or detailed help with "help cmd"."""
if arglist:
# Getting help for a specific command
funcname = self._func_named(arglist[0])
if funcname:
# Check to see if this function was decorated with an argparse ArgumentParser
func = getattr(self, funcname)
if func.__dict__.get('has_parser', False):
# Function has an argparser, so get help based on all the arguments in case there are sub-commands
new_arglist = arglist[1:]
new_arglist.append('-h')
# Temporarily redirect all argparse output to both sys.stdout and sys.stderr to self.stdout
with redirect_stdout(self.stdout):
with redirect_stderr(self.stdout):
func(new_arglist)
else:
# No special behavior needed, delegate to cmd base class do_help()
cmd.Cmd.do_help(self, funcname[3:])
else:
# Show a menu of what commands help can be gotten for
self._help_menu()