469,353 Members | 2,292 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,353 developers. It's quick & easy.

getopt

Hi,

I'm going over a script that demonstrates the getopt function. I include
the script here:
#! /usr/bin/python

import sys, getopt, string

def help_message():
print '''options.py -- uses getopt to recognize options
Options: -h -- displays this help message
-a -- expects an argument
--file= -- expects an argument
--view -- doesn't necessarily expect an argument
--version -- displays Python version'''
sys.exit(0)

try:
options, xarguments = getopt.getopt(sys.argv[1:], 'ha', \
['file=', 'view=', 'version', 'python-version'])
except getopt.error:
print '''Error: You tried to use an unknown option or the
argument for an option that requires it was missing. Try
`options.py -h\' for more information.'''
sys.exit(0)

for a in options[:]:
if a[0] == '-h':
help_message()

for a in options[:]:
if a[0] == '-a' and a[1] != '':
print a[0]+' = '+a[1]
options.remove(a)
break
elif a[0] == '-a' and a[1] == '':
print '-a expects an argument'
sys.exit(0)

for a in options[:]:
if a[0] == '--file' and a[1] != '':
print a[0]+' = '+a[1]
options.remove(a)
break
elif a[0] == '--file' and a[1] == '':
print '--file expects an argument'
sys.exit(0)

for a in options[:]:
if a[0] == '--view' and a[1] != '':
print a[0]+' = '+a[1]
options.remove(a)
break
elif a[0] == '--view' and a[1] == '':
print '--view doesn\'t necessarily expect an argument...'
options.remove(a)
sys.exit(0)

for a in options[:]:
if a[0] == '--version':
print 'options version 0.0.001'
sys.exit(0)

for a in options[:]:
if a[0] == '--python-version':
print 'Python '+sys.version
sys.exit(0)

# END OF SCRIPT

When I execute the script with the -a option or the --view option as in:

../script_name -a myarg

It should report back:

-a = myarg

Instead it gives me:

-a expects an argument

This goes the same for the --file argument. The only one that works as
it should is the --view argument, as in:

../help2.py --view=myarg
--view = ssdt

This is because an equal sign (=) has been appended to 'view' when
getopt is called. If I add an equal sign to file (file=), it starts
working as it should too.

Can anyone explain this?

--
Thanks,

Don
Jul 18 '05 #1
3 6851
Don Low wrote:
I'm going over a script that demonstrates the getopt function. I include
the script here:
I you are only now exploring the possibilities of getopt, you might want to
leapfrog and use the more powerful optparse module.
options, xarguments = getopt.getopt(sys.argv[1:], 'ha', \
['file=', 'view=', 'version', 'python-version'])


If you want the "a" option to require an argument, you have to append a
colon serving the same purpose as the "=" for long options:

options, xarguments = getopt.getopt(sys.argv[1:], 'ha:', \
['file=', 'view=', 'version', 'python-version'])
Peter
Jul 18 '05 #2
Don Low <m_*******@sympatico.ca> writes:
Hi,

I'm going over a script that demonstrates the getopt function. I include
the script here: [...] Can anyone explain this?


Sorry for not answering your question, but can't you just use optparse (comes
with python 2.3) or optik (same, but as downloadable library for older
pythons)? It's much nicer.

'as
Jul 18 '05 #3
Don Low wrote:
options, xarguments = getopt.getopt(sys.argv[1:], 'ha', \ [snip] When I execute the script with the -a option or the --view option as in:

./script_name -a myarg

It should report back:

-a = myarg


The second argument should have a colon after any letter/option that
takes an argument.
Also, a useful trick is to cast the opts to a dict. This prevents the
need for iterating over the opts and allows for concise definition of
default arguments.

e.g.
opts,args = getopt.getopt(sys.argv[1:] , 'h:a:v' )
opts = dict(opts)

hparm = opts.get('-h','cutie')
aparm = float( opts.get( '-a', math.pi ) )
verbose = opts.has_key('-v')
Caveats: the dict trick does not allow an option to be specified more
than once (e.g. -vv), it also loses ordering.
- Mark

Jul 18 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

6 posts views Thread by David Bear | last post: by
4 posts views Thread by Dan Rawson | last post: by
3 posts views Thread by Dominik Kaspar | last post: by
6 posts views Thread by Frans Englich | last post: by
1 post views Thread by Andrew | last post: by
14 posts views Thread by Josť de Paula | last post: by
4 posts views Thread by pinkfloydhomer | last post: by
1 post views Thread by Daniel Mark | last post: by
2 posts views Thread by auditory | last post: by
reply views Thread by suresh191 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.