[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Needing Help with OptionParser

Bryan Richardson

1/8/2008 8:09:00 PM

[Note: parts of this message were removed to make it a legal post.]

Hello All,

I'm hoping someone can help me get around a problem I'm having. I have a
Ruby command-line program where I use OptionParser to parse the program's
options. This program is a wrapper for a bunch of other programs, each of
which also accept command-line options. A typical run command would look
like this:

#> wrapper_app --script-to-run MyScript --script-options "--input
foo.txt--output
bar.txt"

Where the information passed with --script-options is the options to use for
the script to be ran. However, OptionParser in my main wrapper program
attempts to parse the options given by --script-options and throws an error
because they aren't valid options for the main wrapper program. I was
hoping that surrounding them in quotes would cause it to be seen as a single
input string to --script-options but that doesn't seem to be the case. Does
anyone know how I can do what I'm trying to do?

Thanks in advance!!! -- BTR

2 Answers

Stefano Crocco

1/8/2008 9:34:00 PM

0

Alle marted=EC 8 gennaio 2008, Bryan Richardson ha scritto:
> Hello All,
>
> I'm hoping someone can help me get around a problem I'm having. I have a
> Ruby command-line program where I use OptionParser to parse the program's
> options. This program is a wrapper for a bunch of other programs, each of
> which also accept command-line options. A typical run command would look
> like this:
>
> #> wrapper_app --script-to-run MyScript --script-options "--input
> foo.txt--output
> bar.txt"
>
> Where the information passed with --script-options is the options to use
> for the script to be ran. However, OptionParser in my main wrapper progr=
am
> attempts to parse the options given by --script-options and throws an err=
or
> because they aren't valid options for the main wrapper program. I was
> hoping that surrounding them in quotes would cause it to be seen as a
> single input string to --script-options but that doesn't seem to be the
> case. Does anyone know how I can do what I'm trying to do?
>
> Thanks in advance!!! -- BTR

I had exactly the same problem once. With the help of some people on this=20
list, I found the following solution:

require 'optparse'

option_parser =3D OptionParser.new do |o|
o.on('-a', '--a-option', 'something'){}
end

unknown =3D []

begin
option_parser.parse! ARGV
rescue OptionParser::InvalidOption =3D> e
e.recover ARGV
#recover just put the unknown option back into ARGV, so I extract it
#again and put it into unknown
unknown << ARGV.shift

#if ARGV still contains some elements, and the first one doesn't start
#with a -, i.e is the argument for the unknown option, I remove it as=20
#well
unknown << ARGV.shift if ARGV.size>0 and ARGV.first[0..0]!=3D'-'
# go on with parsing
retry
end

p unknown

I hope this helps

Stefano

Bryan Richardson

1/8/2008 9:44:00 PM

0

Stefano,

Great! Thanks for the help. I'll try this out as soon as I can!!!

Bryan

On Jan 8, 2008 2:34 PM, Stefano Crocco <stefano.crocco@alice.it> wrote:

> Alle marted=EC 8 gennaio 2008, Bryan Richardson ha scritto:
> > Hello All,
> >
> > I'm hoping someone can help me get around a problem I'm having. I have
> a
> > Ruby command-line program where I use OptionParser to parse the
> program's
> > options. This program is a wrapper for a bunch of other programs, each
> of
> > which also accept command-line options. A typical run command would
> look
> > like this:
> >
> > #> wrapper_app --script-to-run MyScript --script-options "--input
> > foo.txt--output
> > bar.txt"
> >
> > Where the information passed with --script-options is the options to us=
e
> > for the script to be ran. However, OptionParser in my main wrapper
> program
> > attempts to parse the options given by --script-options and throws an
> error
> > because they aren't valid options for the main wrapper program. I was
> > hoping that surrounding them in quotes would cause it to be seen as a
> > single input string to --script-options but that doesn't seem to be the
> > case. Does anyone know how I can do what I'm trying to do?
> >
> > Thanks in advance!!! -- BTR
>
> I had exactly the same problem once. With the help of some people on this
> list, I found the following solution:
>
> require 'optparse'
>
> option_parser =3D OptionParser.new do |o|
> o.on('-a', '--a-option', 'something'){}
> end
>
> unknown =3D []
>
> begin
> option_parser.parse! ARGV
> rescue OptionParser::InvalidOption =3D> e
> e.recover ARGV
> #recover just put the unknown option back into ARGV, so I extract it
> #again and put it into unknown
> unknown << ARGV.shift
>
> #if ARGV still contains some elements, and the first one doesn't start
> #with a -, i.e is the argument for the unknown option, I remove it as
> #well
> unknown << ARGV.shift if ARGV.size>0 and ARGV.first[0..0]!=3D'-'
> # go on with parsing
> retry
> end
>
> p unknown
>
> I hope this helps
>
> Stefano
>
>