getopt issues

D

David Bear

I'm stumped. Trying to follow the docs and .. failure.

here's the args
'(e-mail address removed) -AKHAAM@prlinux+898 -CA --D2003-08-20-09:28:13.417 -Ff -Hprlinux --JTCPIP_NPF_TEST_DARS_PORTRAIT -NTCPIP_NPF_TEST_DARS_PORTRAIT --Pholdqueue -Qholdqueue -aacct -b2895 -d/var/spool/lpd/holdqueue -edfA898prlinux -fTCPIP_NPF_TEST_DARS_PORTRAIT -hprlinux -j898 -kcfA898prlinux -l66 -nKHAAM -sstatus -t2003-08-20-09:28:13.000 -w80 -x0 -y0 acct \n'


I know, they're long. sorry. they just are. and maybe thats the
bug.

here's what happens
a, b = getopt.getopt(args, 'APQn')
a []
b
'(e-mail address removed) -AKHAAM@prlinux+898 -CA --D2003-08-20-09:28:13.417 -Ff -Hprlinux --JTCPIP_NPF_TEST_DARS_PORTRAIT -NTCPIP_NPF_TEST_DARS_PORTRAIT --Pholdqueue -Qholdqueue -aacct -b2895 -d/var/spool/lpd/holdqueue -edfA898prlinux -fTCPIP_NPF_TEST_DARS_PORTRAIT -hprlinux -j898 -kcfA898prlinux -l66 -nKHAAM -sstatus -t2003-08-20-09:28:13.000 -w80 -x0 -y0 acct \n'


not at all what the docs lead me to believe. Is getopt buggy?

I'm on python 2.2.2 on linux but will also be using python 2.1.3 on
FreeBsd.

Advice?

--
David Bear
phone: 480-965-8257
fax: 480-965-9189
College of Public Programs/ASU
Wilson Hall 232
Tempe, AZ 85287-0803
"Beware the IP portfolio, everyone will be suspect of trespassing"
 
S

Steven Taschuk

Quoth David Bear:
'(e-mail address removed) -AKHAAM@prlinux+898 [...] [...]

getopt wants its arguments as a list of strings (like sys.argv),
not one big string. Here, for example,
Traceback (most recent call last):
...
getopt.GetoptError: option -M not recognized

as expected.
 
R

Raymond Hettinger

[David Bear]
I'm stumped. Trying to follow the docs and .. failure.

here's the args
'(e-mail address removed) -AKHAAM@prlinux+898 -CA --D2003-08-20-09:28:13.417 -Ff
-Hprlinux --JTCPIP_NPF_TEST_DARS_PORTRAIT -NTCPIP_NPF_TEST_DARS_PORTRAIT --Phold
queue -Qholdqueue -aacct -b2895 -d/var/spool/lpd/holdqueue -edfA898prlinux -fTCP
IP_NPF_TEST_DARS_PORTRAIT -hprlinux -j898 -kcfA898prlinux -l66 -nKHAAM -sstatus
-t2003-08-20-09:28:13.000 -w80 -x0 -y0 acct \n'
I know, they're long. sorry. they just are. and maybe thats the
bug.

here's what happens
a, b = getopt.getopt(args, 'APQn')
a []
b
'(e-mail address removed) -AKHAAM@prlinux+898 -CA --D2003-08-20-09:28:13.417 -Ff
-Hprlinux --JTCPIP_NPF_TEST_DARS_PORTRAIT -NTCPIP_NPF_TEST_DARS_PORTRAIT --Phold
queue -Qholdqueue -aacct -b2895 -d/var/spool/lpd/holdqueue -edfA898prlinux -fTCP
IP_NPF_TEST_DARS_PORTRAIT -hprlinux -j898 -kcfA898prlinux -l66 -nKHAAM -sstatus
-t2003-08-20-09:28:13.000 -w80 -x0 -y0 acct \n'
not at all what the docs lead me to believe. Is getopt buggy?

Normally, it is prudent to suspect your own code first rather
than the module.

In this case, getopt is expecting a list for the args argument which
normally comes from sys.argv. Try this:

args = args.split()
a, b = getopt.getopt(args, 'APQn')

That will get you closer.
The next step is define the missing codes like -M.


Raymond Hettinger
 
D

David Bear

'(e-mail address removed) -AKHAAM@prlinux+898 [...] [...]
a, b = getopt.getopt(args, 'APQn')

getopt wants its arguments as a list of strings (like sys.argv),
not one big string. Here, for example,

many thanks. I didn't think the 'list' of args that getopt wanted was a
python list.

now that I've read a little more of the getopt documentation, it says that
getopt stops processing when a 'nonoption' is encounted. Is there a way
to have it process the whole argument list, then only return the options
specified in options, rather than have it through an exception and return
nothing?
'APQn') > Traceback (most recent call last):
 
S

Steven Taschuk

Quoth David Bear:
[...]
now that I've read a little more of the getopt documentation, it says that
getopt stops processing when a 'nonoption' is encounted. Is there a way
to have it process the whole argument list, then only return the options
specified in options, rather than have it through an exception and return
nothing?

I don't think so. This is an unusual request -- normally it is
desirable for a program to insist on correct usage, rather than
trying to guess what the user meant. (Imagine, for example, that
a user types 'rm -I *', intending 'rm -i *', and rm just ignores
the unknown option '-I'. This would be bad.)

It might, however, be possible to subclass optparse.OptionParser
to get the behaviour you want. (The optparse module is new in the
2.3 stdlib.)
 
A

Andrew Dalke

David Bear:
Still, I think getopt is rather weak. It would be better if I could build
a dictionary of options that I wanted, then when parsing the args, just
fill in my dictionary values from args that I want.

See the optparse modules in the new 2.3 distribution, at
http://www.python.org/doc/2.3/lib/module-optparse.html

from optparse import OptionParser

parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout")

(options, args) = parser.parse_args()


Andrew
(e-mail address removed)
 
D

David Boddie

David Bear said:
good points. yet, my purpose is to write a filter. the problem being
that with different lpr implementations you don't know exactly what
parameters will be passed since lpr is not really standardize (at least
thats my understanding). I'm just interested in two parameters out of
possibly many.

Can't you specify all the possible parameters and collect only those you
want, or are you dealing with conflicting specifications of certain options?
Still, I think getopt is rather weak. It would be better if I could build
a dictionary of options that I wanted, then when parsing the args, just
fill in my dictionary values from args that I want.

As an aside, since it doesn't deal with cases where the option is
concatenated with the following parameter, you might find cmdsyntax
interesting since it aims to populate dictionaries with appropriately
named entries for the command line input:

http://www.boddie.org.uk/david/Projects/Python/CMDSyntax/index.html

It will also try and parse the arguments and return a list of failed
matches if requested.

However, it may well be overkill for your purposes.

David
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

tar interface 4
mod_python and zope 1
win32 file attributes 2
testing the data-type of a stream 1
can read drwtsn32 log entry? 1

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top