Needing Help with OptionParser

  • Thread starter Bryan Richardson
  • Start date

B

Bryan Richardson

[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
 
Ad

Advertisements

S

Stefano Crocco

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
 
Ad

Advertisements

B

Bryan Richardson

Stefano,

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

Bryan

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
 

Top