classification
Title: New default argparse output to be added
Type: enhancement Stage: resolved
Components: Library (Lib) Versions: Python 2.7
process
Status: closed Resolution: duplicate
Dependencies: Superseder: Improve argparse usage/help customization
View: 11695
Assigned To: bethard Nosy List: Tom.Browder, bethard
Priority: normal Keywords:

Created on 2010-08-20 21:04 by Tom.Browder, last changed 2011-03-27 14:23 by bethard. This issue is now closed.

Messages (8)
msg114457 - (view) Author: Tom Browder (Tom.Browder) Date: 2010-08-20 21:04
When I use the argparse module, and I enter my program name with NO arguments or options, I would like the argparser to output something like:

Usage: <program name> [options]
Use option '-h' for help.

I haven't yet found how to do that in the argparse module source code, but I do that now in my programs by adding this code near the beginning of the program:

# give rudimentary help if nothing but prog name is entered
import os
# get program name as it is called
pnam = os.path.basename(sys.argv[0])
Use = "Usage: {0} [options]".format(pnam)
if len(sys.argv) == 1:
    print(Use)
    print("Use option '-h' for help.")
    sys.exit()
msg114706 - (view) Author: Steven Bethard (bethard) * (Python committer) Date: 2010-08-22 21:01
A simpler approach might be to do this before your call to parse_args:

if len(sys.argv[0]) == 1:
    parser.print_help()

Does that solve your problem?
msg114708 - (view) Author: Tom Browder (Tom.Browder) Date: 2010-08-22 21:42
On Sun, Aug 22, 2010 at 16:01, Steven Bethard <report@bugs.python.org> wrote:
>
> Steven Bethard <steven.bethard@gmail.com> added the comment:
>
> A simpler approach might be to do this before your call to parse_args:
>
> if len(sys.argv[0]) == 1:
>    parser.print_help()
>
> Does that solve your problem?

No, Steven, I get no response at all.

-Tom
msg114711 - (view) Author: Steven Bethard (bethard) * (Python committer) Date: 2010-08-22 22:06
Sorry, typo. Should have been len(sys.argv) == 1. Full script:

import argparse
import sys

parser = argparse.ArgumentParser()
parser.add_argument('--foo')

if len(sys.argv) == 1:
    parser.print_help()  
else:
    print(parser.parse_args())

With that script, I see:

$ ./python.exe temp.py 
usage: temp.py [-h] [--foo FOO]

optional arguments:
  -h, --help  show this help message and exit
  --foo FOO
msg114737 - (view) Author: Tom Browder (Tom.Browder) Date: 2010-08-23 11:08
On Sun, Aug 22, 2010 at 17:06, Steven Bethard <report@bugs.python.org> wrote:
...
> import argparse
> import sys
>
> parser = argparse.ArgumentParser()
> parser.add_argument('--foo')
>
> if len(sys.argv) == 1:
>    parser.print_help()
> else:
>    print(parser.parse_args())

Of course that works, but I want to be able to customize the parser so
it shows something like:

  Usage: <program name> [options]
  Use option '-h' for help.

Two problems for me with current behavior:

1.   "usage" and "optional" => not capitalized

2.   usage: temp.py [-h] [--foo FOO] => gets very lengthy and mind
numbing for programs with lots of options

Regards,

-Tom
msg114772 - (view) Author: Steven Bethard (bethard) * (Python committer) Date: 2010-08-24 07:56
I see. When there are no arguments you basically want to replace the standard argparse help entirely with your own message, with your own capitalization, etc. What you're doing now looks like a pretty good approach for this, so I guess I'm still not clear what you're asking for. Could you suggest a concrete API for argparse that would make it easier to do what you want to do?
msg114775 - (view) Author: Tom Browder (Tom.Browder) Date: 2010-08-24 11:07
...
> I see. When there are no arguments you basically want to replace the standard
> argparse help entirely with your own > message, with your own capitalization, etc.
> What you're doing now looks like a pretty good approach for this, so
> I guess I'm still not clear what you're asking for. Could you suggest a concrete
>  API for argparse that would make it easier to do what you want to do?

I think so, Steven, let me look at it a bit and I'll get back to you.

Thanks,

-Tom

Thomas M. Browder, Jr.
Niceville, Florida
USA
msg132329 - (view) Author: Steven Bethard (bethard) * (Python committer) Date: 2011-03-27 14:23
I'm moving this over to Issue 11695, which proposes support for a usage/help message template.
History
Date User Action Args
2011-03-27 14:23:07bethardsetstatus: open -> closed
resolution: duplicate
messages: + msg132329

superseder: Improve argparse usage/help customization
stage: resolved
2010-08-24 11:07:07Tom.Browdersetmessages: + msg114775
2010-08-24 07:56:02bethardsetmessages: + msg114772
2010-08-23 11:08:49Tom.Browdersetmessages: + msg114737
2010-08-22 22:06:38bethardsetmessages: + msg114711
2010-08-22 21:42:13Tom.Browdersetmessages: + msg114708
2010-08-22 21:01:10bethardsetmessages: + msg114706
2010-08-20 21:21:52benjamin.petersonsetassignee: bethard

nosy: + bethard
2010-08-20 21:04:47Tom.Browdercreate