467,084 Members | 1,243 Online
Bytes | Developer Community
Ask Question

Home New Posts Topics Members FAQ

Post your question to a community of 467,084 developers. It's quick & easy.

optparse -- anyway to find if the user entered an option?

Hi,

I see that I can provide a default value for an option. But I couldn't
find out any way if the user really entered the option or the option
took that value because of default. A simple check for value with
default may not always work as the user might have manually
entered the same default value.

Let's assume I want to take in the ip-address using -i <ip-addr>.
If user didn't give it explicitly, I am going to use socket interface
to figure out this host's IP address.

ip_addr_default = '100.100.100.100'

parser.add_option("-i", "--ip-address", dest="ip",
default=ip_addr_default,
metavar="IP-ADDRESS", help="IP address. default:" +
ip_addr_default + "e.g. --i=1.1.1.1"
)

(options, args) = parser.parse_args()

Now if options.ip == ip_addr_default, I still can't be 100% sure that
the user did not type -i 100.100.100.100.
Any way to figure out from options that the user typed it or not?

(The reason I want to know this is if user did not mention -i, I can
compute IP later
using socket module)

I could think of a hack of using None as default and since no user can
ever
enter a None value, I can be sure that the user didn't provide -i.
I'm wondering if there is a cleaner approach -- something like
parser.opt_seen("-i")

Thanks,
Karthik

Apr 14 '07 #1
  • viewed: 4209
Share:
4 Replies
Karthik Gurusamy wrote:
Hi,

I see that I can provide a default value for an option. But I couldn't
find out any way if the user really entered the option or the option
took that value because of default. A simple check for value with
default may not always work as the user might have manually
entered the same default value.

Let's assume I want to take in the ip-address using -i <ip-addr>.
If user didn't give it explicitly, I am going to use socket interface
to figure out this host's IP address.

ip_addr_default = '100.100.100.100'

parser.add_option("-i", "--ip-address", dest="ip",
default=ip_addr_default,
metavar="IP-ADDRESS", help="IP address. default:" +
ip_addr_default + "e.g. --i=1.1.1.1"
)

(options, args) = parser.parse_args()

Now if options.ip == ip_addr_default, I still can't be 100% sure that
the user did not type -i 100.100.100.100.
Any way to figure out from options that the user typed it or not?

(The reason I want to know this is if user did not mention -i, I can
compute IP later
using socket module)

I could think of a hack of using None as default and since no user can
ever
enter a None value, I can be sure that the user didn't provide -i.
I'm wondering if there is a cleaner approach -- something like
parser.opt_seen("-i")

Thanks,
Karthik
Using None wouldn't be a hack, it would rather be a common and
straightforward python idiom.

Compare:

if parser.opt_seen("-i"):
do_whatever()

to

if options.ip is None:
do_whatever()

Looks like the second even saves a little typing. After using the former
a while, I would venture to guess that you might realize how the latter
is actually cleaner.

James
Apr 15 '07 #2
On Sat, 14 Apr 2007 16:49:22 -0700, Karthik Gurusamy wrote:
I'm wondering if there is a cleaner approach -- something like
parser.opt_seen("-i")
What do dir(parser) and help(parser) say?

--
Steven.
Apr 15 '07 #3
On Apr 14, 7:54 pm, Steven D'Aprano
<s...@REMOVE.THIS.cybersource.com.auwrote:
On Sat, 14 Apr 2007 16:49:22 -0700, Karthik Gurusamy wrote:
I'm wondering if there is a cleaner approach -- something like
parser.opt_seen("-i")

What do dir(parser) and help(parser) say?
They don't seem to convey existence of a routine like the
one I'm looking for. I did check the lib reference - I guess
such a support is not available. Most likely the 'None'
solution will work for me. I will go ahead with it.

Karthik

>>dir(parser)
['__doc__', '__init__', '__module__', '_add_help_option',
'_add_version_option', '_check_conflict', '_create_option_list',
'_create_option_mappings', '_get_all_options', '_get_args',
'_get_encoding', '_init_parsing_state', '_long_opt',
'_match_long_opt', '_populate_option_list', '_process_args',
'_process_long_opt', '_process_short_opts', '_share_option_mappings',
'_short_opt', 'add_option', 'add_option_group', 'add_options',
'allow_interspersed_args', 'check_values', 'conflict_handler',
'defaults', 'description', 'destroy', 'disable_interspersed_args',
'enable_interspersed_args', 'epilog', 'error', 'exit',
'expand_prog_name', 'format_description', 'format_epilog',
'format_help', 'format_option_help', 'formatter',
'get_default_values', 'get_description', 'get_option',
'get_option_group', 'get_prog_name', 'get_usage', 'get_version',
'has_option', 'largs', 'option_class', 'option_groups', 'option_list',
'parse_args', 'print_help', 'print_usage', 'print_version',
'process_default_values', 'prog', 'rargs', 'remove_option',
'set_conflict_handler', 'set_default', 'set_defaults',
'set_description', 'set_process_default_values', 'set_usage',
'standard_option_list', 'usage', 'values', 'version']
>>>
print sys.version
2.5 (r25:51908, Sep 29 2006, 12:35:59)
[GCC 3.2.3 20030502 (Red Hat Linux 3.2.3-54)]

help(parser) just gives info on a generic instance.
>
--
Steven.

Apr 15 '07 #4
James Stroud wrote:
Karthik Gurusamy wrote:
>Hi,

I see that I can provide a default value for an option. But I couldn't
find out any way if the user really entered the option or the option
took that value because of default. A simple check for value with
default may not always work as the user might have manually
entered the same default value.

Let's assume I want to take in the ip-address using -i <ip-addr>.
If user didn't give it explicitly, I am going to use socket interface
to figure out this host's IP address.

ip_addr_default = '100.100.100.100'

parser.add_option("-i", "--ip-address", dest="ip",
default=ip_addr_default,
metavar="IP-ADDRESS", help="IP address. default:" +
ip_addr_default + "e.g. --i=1.1.1.1"
)

(options, args) = parser.parse_args()

Now if options.ip == ip_addr_default, I still can't be 100% sure that
the user did not type -i 100.100.100.100.
Any way to figure out from options that the user typed it or not?

(The reason I want to know this is if user did not mention -i, I can
compute IP later
using socket module)

I could think of a hack of using None as default and since no user can
ever
enter a None value, I can be sure that the user didn't provide -i.
I'm wondering if there is a cleaner approach -- something like
parser.opt_seen("-i")

Thanks,
Karthik

Using None wouldn't be a hack, it would rather be a common and
straightforward python idiom.
I agree. Also, remember that in optparse the default default (if you
will) is None.
--
Michael Hoffman
Apr 15 '07 #5

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

8 posts views Thread by Hans-Joachim Widmaier | last post: by
7 posts views Thread by Henry Ludemann | last post: by
7 posts views Thread by R. Bernstein | last post: by
8 posts views Thread by Ritesh Raj Sarraf | last post: by
1 post views Thread by Mariano Mara | last post: by
2 posts views Thread by mbeachy@gmail.com | last post: by
3 posts views Thread by Dan | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.