如何在getopt中设置cmd参数未设置时的默认值
我在Python脚本中使用getopt来解析命令行参数。请问可以为命令行参数设置默认值吗?
try:
opts, args = getopt.getopt(argv,"htt:tf:d:",["from=","to=","on="])
except getopt.GetoptError:
print 'logReader.py -f <from> -t <to> -d <on>'
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print 'logReader.py -f <from> -t <to> -d <on>'
sys.exit()
elif opt in ("-f", "--from"):
fromTime = arg
elif opt in ("-t", "--to"):
toTime = arg
elif opt in ("-d", "--on"):
onDate = arg
所以我想要这样做:如果没有设置from
,那么fromTime
应该被设置为一个默认值。
3 个回答
0
最简单的方法就是在查看参数之前,先设置好参数的值。如果用户在命令行没有指定这个参数,它就会使用默认值:
try:
opts, args = getopt.getopt(argv,"htt:tf:d:",["from=","to=","on="])
except getopt.GetoptError:
print 'logReader.py -f <from> -t <to> -d <on>'
sys.exit(2)
fromTime = Default_value
for opt, arg in opts:
if opt == '-h':
print 'logReader.py -f <from> -t <to> -d <on>'
sys.exit()
elif opt in ("-f", "--from"):
fromTime = arg
elif opt in ("-t", "--to"):
toTime = arg
elif opt in ("-d", "--on"):
onDate = arg
如果用户指定了 -f
或 --from
,那么这个值就会覆盖默认值。记得在你的 -h
帮助信息中提到这个默认值哦。
3
使用内置的 argparse 包,你可以这样做:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-p', '--population',
required=False,
type=int,
default=100,
dest="pop",
metavar="<number of individuals>",
help="Number of individuals in each population" )
parser.add_argument('-g', '--generation',
required=False,
type=int,
default=30,
dest="ngen",
metavar="<number of generations>",
help="Number of generations to calculate" )
args = parser.parse_args()
如你所见,你可以定义参数类型、默认值、使用信息、参数的长短版本等等。一旦创建了这个对象,你就可以通过它的 dest
属性来访问这些值。例如,参数 -g
会存储在 args.ngen
中,而 -p
会存储在 args.pop
中。
关于兼容性问题,argparse 在 Python 版本 2.3 及以上是可以使用的,具体可以查看它的 pypi 页面。只需安装它或者把它打包进你的项目里就可以了。
2
使用 argparse,这是从 教程 修改过来的:
import argparse
parser = argparse.ArgumentParser()
# The -- indicates that it is optional
parser.add_argument("--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:
print "verbosity turned on"
else:
print "Default option"
这样,如果没有添加可选参数,它就会执行 else 语句。它还会添加一个帮助手册,你可以在里面解释所有的选项。如果解析参数失败,它会自动返回脚本的选项。(自动执行这个 logReader.py -f <from> -t <to> -d <on>
)
在评论中,提问者表示由于版本问题,argparse 不再考虑使用。