How to make argparse accept "-4^2+5.3*abs(-2-1)/2" string argument?

Thomas Passin list1 at tompassin.net
Tue Jan 24 10:12:01 EST 2023


On 1/23/2023 9:12 PM, Chris Angelico wrote:
> On Tue, 24 Jan 2023 at 13:09, Jach Feng <jfong at ms4.hinet.net> wrote:
>>
>> Chris Angelico 在 2023年1月24日 星期二清晨5:00:27 [UTC+8] 的信中寫道:
>>> On Tue, 24 Jan 2023 at 07:47, Cameron Simpson <c... at cskk.id.au> wrote:
>>>>
>>>> But for Jach Feng: the "--" is really expected as something the user
>>>> does when they invoke your programme, _explicitly_ saying that what
>>>> follows from here is not an argument. So the user is expected to type:
>>>>
>>>> your_script -x -y -- "-4^2+5.3*abs(-2-1)/2"
>>>>
>>>> where there are -x and -y options, then end of options, then an
>>>> argument, which would look like an option if there wasn't the "--"
>>>> argument.
>>> And if you DON'T expect the user to enter the "--", then why use
>>> argparse? You can just check argv directly to get your arguments.
>>>
>>> This entire thread is a massive "how can I use X to do Y?" problem.
>>>
>>> ChrisA
>> The '--' requirement makes its usage less instinctive, and handling argv directly makes me loss the benefit of using '-h':-)
> 
> if "-h" in sys.argv: usage()
> else: do_stuff_with(sys.argv[1:])
> 
> What is argparse really doing for you?

I second this.  "if '-h' in sys.argv:"  is usually what I do.

Alternatively, you could use "--arg=" syntax and place your string 
"-4^2+5.3*abs(-2-1)/2" its right-hand side":

infix2postfix [options] "--infix=-4^2+5.3*abs(-2-1)/2"

This shouldn't be too hard for a user to work with.  You could scan the 
argument list for the presence of "--infix=" and display the help 
message if it isn't there.



More information about the Python-list mailing list