plac, the easiest command line arguments parser in the world

Anjum Naseer eggheadcafe at anjum.otherinbox.com
Sun Feb 6 15:41:35 CET 2011


You may be interested in a little Python module I wrote to make handling of command line arguments even easier (open source and free to use) - http://freshmeat.net/projects/commando

> On Wednesday, June 02, 2010 12:37 AM Michele Simionato wrote:

> I would like to announce to the world the first public release of
> plac:
> 
> http://pypi.python.org/pypi/plac
> 
> Plac is a wrapper over argparse and works in all versions of
> Python starting from Python 2.3 up to Python 3.1.
> 
> With blatant immodesty, plac claims to be the easiest to use command
> line arguments parser module in the Python world. Its goal is to
> reduce the
> learning curve of argparse from hours to minutes. It does so by
> removing the need to build a command line arguments parser by hand:
> actually it is smart enough to infer the parser from function
> annotations.
> 
> Here is a simple example (in Python 3) to wet your appetite:
> 
> $ cat example.py
> def main(arg: "required argument"):
> "do something with arg"
> print('Got %s' % arg)
> 
> if __name__ == '__main__':
> import plac; plac.call(main) # passes sys.argv[1:] to main
> 
> $ python example.py -h
> usage: example.py [-h] arg
> 
> do something with arg
> 
> positional arguments:
> arg         required argument
> 
> optional arguments:
> -h, --help  show this help message and exit
> 
> 
> $ python example.py
> usage: example.py [-h] arg
> example.py: error: too few arguments
> 
> $  python example.py arg
> Got arg
> 
> $  python example.py arg1 arg2
> usage: example.py [-h] arg
> example.py: error: unrecognized arguments: arg2
> 
> You can find in the documentation a lot of other simple and not so
> simple
> examples:
> 
> http://micheles.googlecode.com/hg/plac/doc/plac.html
> 
> 
> Enjoy!
> 
> Michele Simionato
> 
> P.S. answering an unspoken question: yes, we really needed yet
> another
> command line arguments parser! ;)


>> On Wednesday, June 02, 2010 4:28 AM Tim Golden wrote:

>> On 02/06/2010 05:37, Michele Simionato wrote:
>> 
>> I like it. I am a constant user of the
>> 
>> def main (a, b=1, c=2):
>> 
>> if __name__ == '__main__':
>> main (*sys.argv[1:])
>> 
>> pattern, which provides a minimally semi-self-documenting
>> approach for positional args, but I have always found the existing
>> offerings just a little too much work to bother with.
>> I will give plac a run and see how it behaves.
>> 
>> Thanks
>> 
>> TJG


>>> On Wednesday, June 02, 2010 4:43 AM Paul Rubin wrote:

>>> Tim Golden <mail at timgolden.me.uk> writes:
>>> 
>>> After using optparse a couple of times I got the hang of it.  Maybe its
>>> docs could be organized a bit better, but it does the obvious things
>>> conveniently once you have figured it out a bit.


>>>> On Wednesday, June 02, 2010 4:49 AM Michele Simionato wrote:

>>>> Notice that optparse is basically useless in the use case Tim is
>>>> considering (positional arguments) since it only manages options.


>>>>> On Wednesday, June 02, 2010 4:52 AM Jean-Michel Pichavant wrote:

>>>>> Michele Simionato wrote:
>>>>> Thanks for participating.
>>>>> 
>>>>> JM


>>>>>> On Wednesday, June 02, 2010 5:01 AM Stefan Behnel wrote:

>>>>>> Paul Rubin, 02.06.2010 10:43:
>>>>>> 
>>>>>> Same from here. I managed to talk a Java-drilled collegue of mine into
>>>>>> writing a Python script for a little command line utility, but he needed a
>>>>>> way to organise his argument extraction code when the number of arguments
>>>>>> started to grow beyond two. I told him that there were two ways to do it:
>>>>>> do it by hand or do it right. He took the right choice and I took him to
>>>>>> the optparse docs, copied the first example into his code and we adapted it
>>>>>> a little. He just loved the beauty of it.
>>>>>> 
>>>>>> Stefan


>>>>>>> On Wednesday, June 02, 2010 5:14 AM Michele Simionato wrote:

>>>>>>> a
>>>>>>> it
>>>>>>> 
>>>>>>> Could you show plac to your friend? I would be curious to know what he
>>>>>>> think.
>>>>>>> Perhaps he would call out his judgment on optparse ;)


>>>>>>>> On Wednesday, June 02, 2010 6:42 AM Antoine Pitrou wrote:

>>>>>>>> By the way, could you stop naming these "optional arguments", since
>>>>>>>> positional arguments can be optional as well? It is confusing :)
>>>>>>>> 
>>>>>>>> Thanks
>>>>>>>> 
>>>>>>>> Antoine.


>>>>>>>>> On Wednesday, June 02, 2010 6:51 AM Tim Golden wrote:

>>>>>>>>> On 02/06/2010 11:42, Antoine Pitrou wrote:
>>>>>>>>> 
>>>>>>>>> The great thing with English is that you can use nouns as
>>>>>>>>> adjectives without changing them, so you can say "option arguments"
>>>>>>>>> and "position arguments" quite happily here :)
>>>>>>>>> 
>>>>>>>>> But then you run into the fact that you are having semantic arguments
>>>>>>>>> about argument semantics :(
>>>>>>>>> 
>>>>>>>>> TJG


>>>>>>>>>> On Wednesday, June 02, 2010 9:06 AM J. Cliff Dyer wrote:

>>>>>>>>>> +1
>>>>>>>>>> 
>>>>>>>>>> Options are options, arguments are arguments.  An optional argument is
>>>>>>>>>> not an option.  It is an argument that can be left out.


>>>>>>>>>>> On Wednesday, June 02, 2010 9:46 AM Michele Simionato wrote:

>>>>>>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>> It seems I have to take that claim back. A few hours after the
>>>>>>>>>>> announce I was pointed out to http://pypi.python.org/pypi/CLIArgs
>>>>>>>>>>> which, I must concede, is even easier to use than plac. It seems
>>>>>>>>>>> everybody has written its own command line arguments parser!


>>>>>>>>>>>> On Wednesday, June 02, 2010 8:51 PM alex23 wrote:

>>>>>>>>>>>> I think I still find opterator[1] to be simpler and clearer. No magic
>>>>>>>>>>>> global variables, no spooky behaviour with the main function, just a
>>>>>>>>>>>> decorator and docstring.
>>>>>>>>>>>> 
>>>>>>>>>>>> 1: http://github.com/buchuki/opterator


>>>>>>>>>>>>> On Thursday, June 03, 2010 11:28 PM Michele Simionato wrote:

>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> The second release is out. I have added the recognition of keyword
>>>>>>>>>>>>> arguments, improved the formatting of the help message, and added many
>>>>>>>>>>>>> tests.


>>>>>>>>>>>>>> On Friday, June 04, 2010 8:48 PM Kenny Meyer wrote:

>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I like this approach to command-line argument parsing! Thanks for
>>>>>>>>>>>>>> sharing your work.


>>>>>>>>>>>>>> Submitted via EggHeadCafe 
>>>>>>>>>>>>>> WCF Generic DataContract object Serializer
>>>>>>>>>>>>>> http://www.eggheadcafe.com/tutorials/aspnet/59ae2b9e-a3be-4cd5-a0ef-939a7abbdc3a/wcf-generic-datacontract-object-serializer.aspx



More information about the Python-list mailing list