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

问题描述 投票:0回答:3

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

python getopt
3个回答
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
中。

关于兼容性问题,根据其 pypi 页面,argparse 确实可以在 Python => 2.3 上工作。只需安装或捆绑即可。


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>

评论中的OP指出,由于版本问题,argparse不予考虑。

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


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
字符串中提及默认值。

© www.soinside.com 2019 - 2024. All rights reserved.