argparse add_argument()标志未被执行

时间:2018-03-26 09:22:10

标签: python python-2.7

我试图添加一个名为' flags'并根据输入的内容对命令行中输入的标志执行某些操作,但程序不会对输入的标记执行任何操作。

输入格式必须为:program.py -flag

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-avgtime', '-avgtemp', '-maxtime', '-maxtemp',
                        nargs='?', dest='flags')
    args = parser.parse_args()

    if args.flags is not None:
        if args.flags == '-avgtime':
            # print something
        elif args.flags == '-avgtemp':
            # print something
        elif args.flags == '-maxtime':
            # print something
        elif args.flags == '-maxtemp':
            # pint something
    else:
        print "Command Not Executed"

当我输入命令python program.py -avgtime时,它只打印"命令未执行"声明,因为args.flags命名空间为空。

2 个答案:

答案 0 :(得分:1)

您需要单独声明这些参数或在相同的参数下收集它们:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--flags', choices=['avgtime', 'avgtemp', 'maxtime', 'maxtemp'])
args = parser.parse_args()
print(args.flags)

将此代码放入main.py并执行:

$ python2.7 main.py --flags maxtemp
maxtemp

请参阅choices

答案 1 :(得分:0)

我使用add_mutually_exclusive_group()方法解决了我的问题。 add_mutually_exclusive_group方法

  

“将确保相互之间只有一个参数   命令行中出现了专属组。“

此外,通过在add_argument()方法的参数中将每个标志的值设置为false,并且仅在使用它时将标志设置为true,我能够确定使用了哪个标志。

flags = parser.add_mutually_exclusive_group(required=False)

flags.add_argument('-avgtime', action='store_true', default=False)
flags.add_argument('-avgtemp', action='store_true', default=False)
flags.add_argument('-maxtime', action='store_true', default=False)
flags.add_argument('-maxtemp', action='store_true', default=False)

flag_is_set = args.avgtime or args.avgtemp or args.maxtime or args.maxtemp

if flag_is_set:
    if args.avgtime:
        # print something
    elif args.avgtemp:
        # print something
    elif args.maxtime:
        # print something
    elif args.maxtemp:
        # pint something
else:
    print "Command Not Executed"