From: Bryan Richardson Date: 2008-01-09T06:44:11+09:00 Subject: Re: Needing Help with OptionParser ------=_Part_6821_22441076.1199828650890 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline 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 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 > > ------=_Part_6821_22441076.1199828650890--