How can I print a Python file's docstring when executing it?

后端 未结 4 840
南笙
南笙 2020-12-29 01:49

I have a Python script with a docstring. When the parsing of the command-line arguments does not succeed, I want to print the docstring for the user\'s information.

相关标签:
4条回答
  • 2020-12-29 02:22

    Here is an alternative that does not hardcode the script's filename, but instead uses sys.argv[0] to print it. Using %(scriptName)s instead of %s improves readability of the code.

    #!/usr/bin/env python
    """
    Usage: %(scriptName)s
    
    This describes the script.
    """
    
    import sys
    if len(sys.argv) < 2:
       print __doc__ % {'scriptName' : sys.argv[0].split("/")[-1]}
       sys.exit(0)
    
    0 讨论(0)
  • 2020-12-29 02:31

    Argument parsing should always be done with argparse.

    You can display the __doc__ string by passing it to the description parameter of Argparse:

    #!/usr/bin/env python
    """
    This describes the script.
    """
    
    
    if __name__ == '__main__':
        from argparse import ArgumentParser
        parser = ArgumentParser(description=__doc__)
        # Add your arguments here
        parser.add_argument("-f", "--file", dest="myFilenameVariable",
                            required=True,
                            help="write report to FILE", metavar="FILE")
        args = parser.parse_args()
        print(args.myFilenameVariable)
    

    If you call this mysuperscript.py and execute it you get:

    $ ./mysuperscript.py --help
    usage: mysuperscript.py [-h] -f FILE
    
    This describes the script.
    
    optional arguments:
      -h, --help            show this help message and exit
      -f FILE, --file FILE  write report to FILE
    
    0 讨论(0)
  • 2020-12-29 02:41

    The docstring is stored in the module's __doc__ global.

    print(__doc__)
    

    By the way, this goes for any module: import sys; print(sys.__doc__). Docstrings of functions and classes are also in their __doc__ attribute.

    0 讨论(0)
  • 2020-12-29 02:45

    This will print the __doc__ string when --help is the only argument.

    if __name__=='__main__':
     if len(sys.argv)==2 and sys.argv[1]=='--help':
        print(__doc__)
    

    Works for both:

    • ./yourscriptname.py --help
    • python3 yourscriptname.py --help
    0 讨论(0)
提交回复
热议问题