Customize help output from optparse (or argparse)

Discussion in 'Python' started by Thorsten Kampe, May 12, 2011.

  1. Hi,

    I'm using optparse for a little Python script.

    1. The output from "--help" is:
    """
    Usage: script.py <arg>

    script.py does something

    Options:
    -h, --help show this help message and exit
    """

    I would prefer to have the description before the usage, like...
    """
    script.py does something

    Usage: script.py <arg>

    Options:
    -h, --help show this help message and exit
    """

    2. The output from "--doesnotexit" is:
    """
    Usage: script.py <arg>

    script.py: error: no such option: --doesnotexist
    """

    I would prefer to have the error first, then the usage and additionally
    the options, like...
    """
    script.py: error: no such option: --doesnotexist

    Usage: script.py <arg>

    Options:
    -h, --help show this help message and exit
    """

    Is that possible with either optparse or the "new kid on the block"
    argparse. If so how?

    Thorsten
     
    Thorsten Kampe, May 12, 2011
    #1
    1. Advertising

  2. Thorsten Kampe wrote:

    > I'm using optparse for a little Python script.
    >
    > 1. The output from "--help" is:
    > """
    > Usage: script.py <arg>
    >
    > script.py does something
    >
    > Options:
    > -h, --help show this help message and exit
    > """
    >
    > I would prefer to have the description before the usage, like...
    > """
    > script.py does something
    >
    > Usage: script.py <arg>
    >
    > Options:
    > -h, --help show this help message and exit
    > """
    >
    > 2. The output from "--doesnotexit" is:
    > """
    > Usage: script.py <arg>
    >
    > script.py: error: no such option: --doesnotexist
    > """
    >
    > I would prefer to have the error first, then the usage and additionally
    > the options, like...
    > """
    > script.py: error: no such option: --doesnotexist
    >
    > Usage: script.py <arg>
    >
    > Options:
    > -h, --help show this help message and exit
    > """
    >
    > Is that possible with either optparse or the "new kid on the block"
    > argparse. If so how?


    You can easily have #1 with optparse.OptionParser(usage="…")¹, but optparse
    is deprecated in favor of argparse.ArgumentParser. I do not think you can
    have #2 with either optparse or argparse: OptionParser() would print the
    error message last, and ArgumentParser() would not print the description
    on error. Subclassing ArgumentParser might be feasible, though.

    ______
    ¹ <http://PointedEars.de/devel/tools/text/odfinfo/>
    --
    PointedEars

    Bitte keine Kopien per E-Mail. / Please do not Cc: me.
     
    Thomas 'PointedEars' Lahn, May 12, 2011
    #2
    1. Advertising

  3. Thorsten Kampe

    Karim Guest

    On 05/12/2011 10:22 PM, Thomas 'PointedEars' Lahn wrote:
    > Thorsten Kampe wrote:
    >
    >> I'm using optparse for a little Python script.
    >>
    >> 1. The output from "--help" is:
    >> """
    >> Usage: script.py<arg>
    >>
    >> script.py does something
    >>
    >> Options:
    >> -h, --help show this help message and exit
    >> """
    >>
    >> I would prefer to have the description before the usage, like...
    >> """
    >> script.py does something
    >>
    >> Usage: script.py<arg>
    >>
    >> Options:
    >> -h, --help show this help message and exit
    >> """
    >>
    >> 2. The output from "--doesnotexit" is:
    >> """
    >> Usage: script.py<arg>
    >>
    >> script.py: error: no such option: --doesnotexist
    >> """
    >>
    >> I would prefer to have the error first, then the usage and additionally
    >> the options, like...
    >> """
    >> script.py: error: no such option: --doesnotexist
    >>
    >> Usage: script.py<arg>
    >>
    >> Options:
    >> -h, --help show this help message and exit
    >> """
    >>
    >> Is that possible with either optparse or the "new kid on the block"
    >> argparse. If so how?

    > You can easily have #1 with optparse.OptionParser(usage="…")¹, but optparse
    > is deprecated in favor of argparse.ArgumentParser. I do not think you can
    > have #2 with either optparse or argparse: OptionParser() would print the
    > error message last, and ArgumentParser() would not print the description
    > on error. Subclassing ArgumentParser might be feasible, though.
    >
    > ______
    > ¹<http://PointedEars.de/devel/tools/text/odfinfo/>


    Please find documentation to configure help in ArgumentParser BUT for
    argparse module:

    - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter,
    50 ArgumentDefaultsHelpFormatter -- Formatter classes which
    51 may be passed as the formatter_class= argument to the
    52 ArgumentParser constructor. HelpFormatter is the default,
    53 RawDescriptionHelpFormatter and RawTextHelpFormatter tell
    the parser
    54 not to change the formatting for help text, and
    55 ArgumentDefaultsHelpFormatter adds information about
    argument defaults
    56 to the help.

    So It seems easy to a different pass formatter_class to ArgumentParser.
    You can inherite
    from HelpFormater class but you have to know the implementation details:
    File is located at <python install>/lib/python2.7/argparse.py

    Cheers
    Karim
     
    Karim, May 12, 2011
    #3
  4. * Thomas 'PointedEars' Lahn (Thu, 12 May 2011 22:22:20 +0200)
    > Thorsten Kampe wrote:
    > > I'm using optparse for a little Python script.
    > >
    > > 1. The output from "--help" is:
    > > """
    > > Usage: script.py <arg>
    > >
    > > script.py does something
    > >
    > > Options:
    > > -h, --help show this help message and exit
    > > """
    > >
    > > I would prefer to have the description before the usage, like...
    > > """
    > > script.py does something
    > >
    > > Usage: script.py <arg>
    > >
    > > Options:
    > > -h, --help show this help message and exit
    > > """
    > > [...]
    > > Is that possible with either optparse or the "new kid on the block"
    > > argparse. If so how?

    >
    > You can easily have #1 with optparse.OptionParser(usage="…")¹, but optparse
    > is deprecated in favor of argparse.ArgumentParser.


    I'm already using usage. That's where optparse has it from. Putting the
    usage message into the description and vice versa is of course not a
    viable way to go.

    Thorsten
     
    Thorsten Kampe, May 21, 2011
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Michael T. Peterson
    Replies:
    2
    Views:
    749
    Michael T. Peterson
    Sep 9, 2003
  2. Dan

    optparse help output

    Dan, Oct 24, 2007, in forum: Python
    Replies:
    3
    Views:
    408
    Steven Bethard
    Oct 24, 2007
  3. samwyse

    optparse/argparse for cgi/wsgi?

    samwyse, Dec 10, 2010, in forum: Python
    Replies:
    0
    Views:
    261
    samwyse
    Dec 10, 2010
  4. Replies:
    6
    Views:
    569
  5. Evan Driscoll

    Introspecting optparse/argparse objects

    Evan Driscoll, Jan 11, 2012, in forum: Python
    Replies:
    2
    Views:
    236
    Evan Driscoll
    Jan 12, 2012
Loading...

Share This Page