getopt issues

Discussion in 'Python' started by David Bear, Aug 27, 2003.

  1. David Bear

    David Bear Guest

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

    here's the args

    >>> args

    ' -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

    ' -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"
     
    David Bear, Aug 27, 2003
    #1
    1. Advertising

  2. Quoth David Bear:
    > >>> args

    > ' -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- @
    7O )
    " (
     
    Steven Taschuk, Aug 27, 2003
    #2
    1. Advertising

  3. [David Bear]

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

    >

    ' -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

    >

    ' -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
     
    Raymond Hettinger, Aug 27, 2003
    #3
  4. David Bear

    David Bear Guest

    On Tue, 26 Aug 2003, Steven Taschuk wrote:
    > > >>> args

    > > ' -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.
    >
    >
     
    David Bear, Aug 27, 2003
    #4
  5. 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
    "Telekinesis would be worth patenting." -- James Gleick
     
    Steven Taschuk, Aug 27, 2003
    #5
  6. David Bear

    Andrew Dalke Guest

    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
     
    Andrew Dalke, Aug 28, 2003
    #6
  7. David Bear

    David Boddie Guest

    David Bear <> wrote in message news:<>...

    > 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
     
    David Boddie, Aug 29, 2003
    #7
    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. Arvind Kumar

    Problem with Getopt

    Arvind Kumar, Nov 3, 2003, in forum: Perl
    Replies:
    1
    Views:
    570
    Jim Gibson
    Nov 3, 2003
  2. dima
    Replies:
    9
    Views:
    702
    llewelly
    Sep 5, 2003
  3. Ramiro Rodriguez

    getopt

    Ramiro Rodriguez, Oct 14, 2003, in forum: C++
    Replies:
    6
    Views:
    4,005
    Lorenzo Bettini
    Oct 17, 2003
  4. Jem Berkes

    Re: Dealing with fragmented getopt parameters

    Jem Berkes, Oct 30, 2003, in forum: C Programming
    Replies:
    2
    Views:
    335
    Jem Berkes
    Oct 30, 2003
  5. Spartan815

    getopt

    Spartan815, Jan 25, 2004, in forum: C Programming
    Replies:
    2
    Views:
    1,079
    Peter Nilsson
    Jan 26, 2004
Loading...

Share This Page