Python argparse значения по умолчанию не работает - PullRequest
0 голосов
/ 18 мая 2018

Я экспериментирую с argparse, программа работает, но значения по умолчанию не работают.Вот мой код:

'''This simple program helps you in understanding how to feed the user input from command line and to show help on passing invalid argument.'''

import argparse
import sys

def calc(args):
    #Enable variables within the function to take on values from 'args' object. 
    operation = args.operation
    x = args.x
    y = args.y

    if (operation == "add"):
        return x + y
    elif (operation == "sub"):
        return x - y

parser = argparse.ArgumentParser(description="This is a summing program")   #parser is an object of the class Argument Parser.
parser.add_argument("x", type=float, default=1.0, help="What is the first number?") #add_argument is a method of the class ArgumentParser.
parser.add_argument("y", type=float, default=1.0, help='What is the second number?')
parser.add_argument("operation", type=str, default="add", help='What operation? Can choose add, sub, mul, or div')
args = parser.parse_args()
print(str(calc(args)))

Эта простая программа работает, однако при попытке вызвать ее без значений возвращается следующая ошибка:

usage: cmdline.py [-h] x y operation
cmdline.py: error: the following arguments are required: x, y, operation

Куда я иду не так?

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Вам не хватает nargs='?'.Следующие работы:

import argparse
import sys 

def calc(args):
    #Enable variables within the function to take on values from 'args' object. 
    operation = args.operation
    x = args.x
    y = args.y

    if (operation == "add"):
        return x + y 
    elif (operation == "sub"):
        return x - y 

parser = argparse.ArgumentParser(description="This is a summing program")   #parser is an object of the class Argument Parser.
parser.add_argument("x", nargs='?', type=float, default=1.0, help="What is the first number?") #add_argument is a method of the class ArgumentParser.
parser.add_argument("y", nargs='?', type=float, default=1.0, help='What is the second number?')
parser.add_argument("operation", nargs='?', type=str, default="add", help='What operation? Can choose add, sub, mul, or div')
args = parser.parse_args()
print(str(calc(args)))
0 голосов
/ 18 мая 2018

@ jbcoe - я думаю, что в вашем коде есть несколько опечаток, но спасибо, это работает!Вот решение, приведенное в порядок:

'''This simple program helps you in understanding how to feed the user input from command line and to show help on passing invalid argument. It uses the argparse module.'''

import argparse

def calc(args):
    #Enable variables within the function to take on values from 'args' object. 
    operation = args.operation
    x = args.x
    y = args.y

    if (operation == "add"):
        return x + y
    elif (operation == "sub"):
        return x - y

parser = argparse.ArgumentParser(description="This is a summing program")   #parser is an object of the class Argument Parser.
parser.add_argument("x", nargs='?', type=float, default=1.0, help="What is the first number?") #add_argument is a method of the class ArgumentParser.
parser.add_argument("y", nargs='?', type=float, default=2.0, help='What is the second number?')
parser.add_argument("operation", nargs='?', type=str, default="add", help='What operation? Can choose add, sub, mul, or div')
args = parser.parse_args()
print(str(calc(args)))
0 голосов
/ 18 мая 2018

Измените эти строки, чтобы указать, что вы хотите именованные, необязательные аргументы командной строки (поэтому "-x" не "x"):

parser.add_argument("-x", type=float, default=1.0, help="What is the first number?") #add_argument is a method of the class ArgumentParser.
parser.add_argument("-y", type=float, default=1.0, help='What is the second number?')
...