我是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.任何帮助都将受到赞赏
答案 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)