如果未在getopt中设置cmd参数,则如何设置默认值

时间:2014-06-12 08:54:20

标签: python getopt

我使用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应设置为某个默认值。

2 个答案:

答案 0 :(得分:2)

使用内置的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 =&gt; 2.3,根据其pypi page。只需安装或捆绑即可。

答案 1 :(得分:1)

使用argparse,从tutorial修改:

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不在考虑范围内。

我看到的其他选项是optparse,或只是基本sys.argv,并使用else子句执行。