如何在python中使用getopt传递灵活的参数?

时间:2012-10-17 17:25:05

标签: python getopt

我是python的新手,我从getopt学到的是我可以在执行python脚本时传递命令行参数。现在我的问题是,有没有办法不设置我可以在命令行中传递的参数数量?

我的代码看起来像这样:

try:
     opts, args = getopt.getopt(sys.argv[1:],"h:1:2:3:4:",["help=", "1week=","2week=", "3week=", "4week="])
except getopt.GetoptError:
     print 'test.py -1 <week 1> -2 <week 2> -3 <week 3> -4 <week 4>'
     sys.exit(2)
for opt, arg in opts:
     if opt == '-h':
          print 'test.py -1 <week 1> -2 <week 2> -3 <week 3> -4 <week 4>'
          sys.exit()
     elif opt in ("-1", "--1week"):
          week1 = arg
     elif opt in ("-2", "--2week"):
          week2 = arg
     elif opt in ("-3", "--3week"):
          week3 = arg
     elif opt in ("-4", "--4week"):
          week4 = arg

并运行上面的代码我使用 python test.py -1 89 -2 88 -3 87 -4 86无论如何,我可以修改这个,我不必总是给出4个参数......还有3个?我希望它具有灵活性,有时我可能会提供3个参数或4.任何帮助都将受到赞赏

2 个答案:

答案 0 :(得分:2)

如果您的计划接受一个或多个周数:

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument('weeks', nargs='+', type=int, help='weeks numbers')
args = parser.parse_args()
print(args)

实施例

$ python your_script.py 1 2 3

输出

Namespace(weeks=[1, 2, 3])

从上面'weekly_1_2_3'生成args.weeks

result = 'weekly_' + '_'.join(map(str, args.weeks))

'weekly_1_2_3_4'命令行的结果为1 2 3 4

答案 1 :(得分:0)

使用argparse(python 2.7)代替。默认情况下,所有选项都被视为可选argparse包含&{34;必需选项的required属性&#34;。

例如:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--firstname', dest='fn', required=True)
parser.add_argument('--greeting', dest='grt', nargs='?', choices=['hello', 'goodbye'], default='hello')
parser.add_argument('--repeat', dest='rpt', nargs='?', default=1, type=int)
args = parser.parse_args()

for n in range(args.rpt):
    print "%d: %s, %s" % (n+1, args.grt, args.fn)