我使用 getopt 解析 python 脚本中的命令行参数。是否可以为命令行参数设置默认值? 我有以下代码:
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
应该设置为某个默认值。
使用内置的 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
中。
关于兼容性问题,根据其 pypi 页面,argparse 确实可以在 Python => 2.3 上工作。只需安装或捆绑即可。
使用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>
)
评论中的OP指出,由于版本问题,argparse不予考虑。
执行此操作的简单方法是在查看参数之前设置参数值。如果没有在命令行中指定,它将具有默认值:
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
字符串中提及默认值。