want to show list of available options and arguments in my command line utility
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Sun Sep 16 03:29:40 EDT 2012
On Sun, 16 Sep 2012 12:20:08 +0530, Santosh Kumar wrote:
> I have a script that takes an which basically takes a command line
> argument and prints after processing. If I don't give the argument to
> the script, it gives me a ValueError:
>
> ValueError: need more than 1 value to unpack
>
> I was trying to utilizing this space, if there is no argument I want it
> to show:
> usages: myscriptpy [option] [argument]
>
> options:
> --help print this help message and exit
>
> Nothing more than that. I was looking on the argparse module, it can do
> the stuffs I want, but
> I don't to rewrite and mess up my current script. What should I do?
Then don't mess it up.
What you are basically asking for sounds like "I want to add this cool
feature to my project, but I don't want to actually do the work of adding
the feature. How can I snap my fingers and make it work just like magic?"
The answer is, you can't.
Either:
1) Do without the feature; or
2) Program the feature.
For number 2), you can either modify your script to use argparse to deal
with the argument handling (which is probably simplest), or you can try
to duplicate argparse's functionality yourself.
Make a backup copy first -- never, ever, ever work on the only copy of a
working script. Or better still, use a proper VCS (version control
system) to manage the software. But for small changes and simple needs, a
good enough solution is "always edit a copy".
In this case, it *may* be simple enough to duplicate the functionality.
There's no way to tell, because you don't show any code, but my *guess*
is that you have a line like:
a, b = sys.argv
and if you don't provide any command-line arguments, that fails with
ValueError: need more than 1 value to unpack
(Lots and lots and lots of other things will also fail with the same
error.)
Is this case, the fix is simple:
args = sys.argv[1:] # ignore the first entry, which is unimportant
if len(args) == 1:
arg = args[0]
process(arg, default_option)
elif len(args) == 2:
option, arg == args
process(arg, option)
elif len(args) > 2:
do_error('too many arguments')
else:
do_error('not enough arguments')
But as the argument checking code gets more extensive, it is time to just
use argparse or one of the other libraries for argument checking instead.
--
Steven
More information about the Python-list
mailing list