On Friday, October 14, 2011 12:41:26 AM UTC-7, Peter Otten wrote: > Carl Banks wrote: > > > Is it possible to specify a zero-length switch? Here's what I mean. > > > > I have a use case where some users would have to enter a section name on > > the command line almost every time, whereas other users (the ones using > > only one section) will never have to enter the section name. I don't want > > to burden users with only one "section" to always enter the section name > > as a required argument, but I also want to make it as convenient as > > possible to enter the section name for those who need to. > > > > My thought, on the thinking that practicality beats purity, was to create > > a zero-length switch using a different prefix character (say, @) to > > indicate the section name. So instead of typing this: > > > > sp subcommand -s abc foo bar > > > > they could type this: > > > > sp subcommand @abc foo bar > > > > Admittedly a small benefit. I tried the following but argparse doesn't > > seem to do what I'd hoped: > > > > p = argparse.ArgumentParser(prefix_chars='-@') > > p.add_argument('@',type=str,dest='section') > > ar = p.parse_args(['@abc']) > > > > This throws an exception claiming unrecognized arguments. > > > > Is there a way (that's not a hack) to do this? Since the current behavior > > of the above code seems to do nothing useful, it could be added to > > argparse with very low risk of backwards incompatibility. > > If the number of positional arguments is otherwise fixed you could make > section a positional argument with nargs="?"
The positional arguments aren't fixed, otherwise I would have done it that way. I ended up deciding to prescan the command line for arguments starting with @, and that actually has some benefits over doing it with argparse. (One little surprise is if you pass it something like "-x @abc foo", where foo is the argument of -x.) I don't really care for or agree with Steven and Ben Finney's foolish consistency. I already weighed it against the benefits of consistency, and decided that this parameter was easily important enough to warrant special treatment. It's actually a good thing for this parameter to look different from other switches; it marks it as specially important. Carl Banks -- http://mail.python.org/mailman/listinfo/python-list