Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using argparse to parse arguments of form "arg= val"

I want to use argparse to parse command lines of form "arg=val" For example, the usage would be:

script.py conf_dir=/tmp/good_conf

To achieve it, I am doing this:

desc   = "details"
parser = argparse.ArgumentParser(description=desc, add_help=False)
args = parser.add_argument("conf_dir")
args = parser.parse_args("conf_dir=FOO".split())
args = parser.parse_args()
print args.conf_dir

But, the problem is that, on invocation of the script with:

python script.py conf_dir=/tmp/good_conf

I get:

conf_dir=/tmp/good_conf

Where as I expect

/tmp/good_conf

So, the question is: Can I use argparse to parse cmd line, which contains name value pairs? Any hints?

Edit: The reason I want to do this and not some thing like --conf_dir=/tmp/good_dir is because there are other tools (written in other language), which uses conf_dir=/tmp/good_dir style of arguments. To maintain consistency, I was to parse args in this way.

like image 856
Shajid Thiruvathodi Avatar asked Mar 01 '11 12:03

Shajid Thiruvathodi


1 Answers

You need a custom action

class StoreNameValuePair(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        n, v = values.split('=', 1)
        setattr(namespace, n, v)

args = parser.add_argument("conf_dir", action=StoreNameValuePair)
like image 147
chepner Avatar answered Sep 21 '22 01:09

chepner