Bryan Richardson
1/8/2008 9:44:00 PM
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
>
>