Python 未执行argparse add_argument()标志
我试图添加一个名为“flags”的参数,并根据输入的内容对在命令行中输入的标志执行某些操作,但程序并没有对输入的标志执行任何操作 输入的格式必须为:Python 未执行argparse add_argument()标志,python,python-2.7,Python,Python 2.7,我试图添加一个名为“flags”的参数,并根据输入的内容对在命令行中输入的标志执行某些操作,但程序并没有对输入的标志执行任何操作 输入的格式必须为:program.py-flag import argparse parser = argparse.ArgumentParser() parser.add_argument('-avgtime', '-avgtemp', '-maxtime', '-maxtemp', nargs='?', dest
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
时,它只打印“command Not Executed”语句,因为args.flags命名空间为空。您需要单独声明这些参数,或者在同一个参数下收集它们:
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
请参阅。我使用
添加互斥组()方法解决了我的问题。方法
“将确保
命令行上存在独占组。“
另外,通过在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"
谢谢你的回答。我这样做的原因是因为我必须能够以以下格式编写命令:program.py-flag
。正是由于这个原因,我无法使用选项。flag\u is\u set
不是没有用吗?@vault否,因为一次只能使用其中一个标志,而flag\u is\u set正在使用,所以我不会多次检查所有标志。好吧,但是如果。。。埃利夫。。。埃利夫。。。埃利夫。。。其他的
?