plac, the easiest command line arguments parser in the world

  • Thread starter Michele Simionato
  • Start date
M

Michele Simionato

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! ;)
 
T

Tim Golden

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.

I like it. I'm 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've always found the existing
offerings just a little too much work to bother with.
I'll give plac a run and see how it behaves.

Thanks

TJG
 
P

Paul Rubin

Tim Golden said:
pattern, which provides a minimally semi-self-documenting
approach for positional args, but I've always found the existing
offerings just a little too much work to bother with.
I'll give plac a run and see how it behaves.

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've figured it out a bit.
 
M

Michele Simionato

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've figured it out a bit.

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

Jean-Michel Pichavant

Michele said:
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! ;)
Thanks for participating.

JM
 
S

Stefan Behnel

Paul Rubin, 02.06.2010 10:43:
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've figured it out a bit.

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
 
M

Michele Simionato

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.

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 ;)
 
A

Antoine Pitrou

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

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

Thanks

Antoine.
 
T

Tim Golden

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

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're having semantic arguments
about argument semantics :(

TJG
 
J

J. Cliff Dyer

+1

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

Michele Simionato

With blatant immodesty, plac claims to be the easiest to use command
line arguments parser module in the Python world

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!
 
A

alex23

Michele Simionato said:
It seems I have to take that claim back. A few hours after the
announce I was pointed out tohttp://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!

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
 
K

Kenny Meyer

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! ;)

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

Anjum Naseer

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
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! ;)
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 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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,576
Members
45,054
Latest member
LucyCarper

Latest Threads

Top