From: Stefano Crocco Date: 2008-01-09T06:34:24+09:00 Subject: Re: Needing Help with OptionParser Alle marted́ 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 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 = OptionParser.new do |o| o.on('-a', '--a-option', 'something'){} end unknown = [] begin option_parser.parse! ARGV rescue OptionParser::InvalidOption => 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]!='-' # go on with parsing retry end p unknown I hope this helps Stefano