Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > getopt issues

Reply
Thread Tools

getopt issues

 
 
David Bear
Guest
Posts: n/a
 
      08-27-2003

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

here's the args

>>> args

'(E-Mail 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 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"
 
Reply With Quote
 
 
 
 
Steven Taschuk
Guest
Posts: n/a
 
      08-27-2003
Quoth David Bear:
> >>> args

> '(E-Mail 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,

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

Traceback (most recent call last):
...
getopt.GetoptError: option -M not recognized

as expected.

--
Steven Taschuk o- @
http://www.velocityreviews.com/forums/(E-Mail Removed) 7O )
" (

 
Reply With Quote
 
 
 
 
Raymond Hettinger
Guest
Posts: n/a
 
      08-27-2003
[David Bear]

> I'm stumped. Trying to follow the docs and .. failure.
>
> here's the args
>
> >>> args

>

'(E-Mail 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 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




 
Reply With Quote
 
David Bear
Guest
Posts: n/a
 
      08-27-2003
On Tue, 26 Aug 2003, Steven Taschuk wrote:
> > >>> args

> > '(E-Mail 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?

> > >>> a, b = getopt.getopt(args.split(),

'APQn') > Traceback (most recent call last):
> ...
> getopt.GetoptError: option -M not recognized
>
> as expected.
>
>


 
Reply With Quote
 
Steven Taschuk
Guest
Posts: n/a
 
      08-27-2003
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.)

--
Steven Taschuk (E-Mail Removed)
"Telekinesis would be worth patenting." -- James Gleick

 
Reply With Quote
 
Andrew Dalke
Guest
Posts: n/a
 
      08-28-2003
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 Removed)


 
Reply With Quote
 
David Boddie
Guest
Posts: n/a
 
      08-28-2003
David Bear <(E-Mail Removed)> wrote in message news:<(E-Mail Removed)>...

> 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/Proje...tax/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
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
getopt Spartan815 C Programming 2 01-26-2004 05:36 AM
Problem with Getopt Arvind Kumar Perl 1 11-03-2003 06:50 PM
Re: Dealing with fragmented getopt parameters Jem Berkes C Programming 2 10-30-2003 02:50 AM
getopt Ramiro Rodriguez C++ 6 10-17-2003 12:14 PM
command args processing lib(a la getopt), anyone? dima C++ 9 09-05-2003 01:10 AM



Advertisments