我试图用python语言(abc.py)编写脚本。我需要在执行脚本时使用少量命令行参数。
说-m,-p是我的论据。我需要在这些选项旁边有一个字符串。 例如:
1. $> python abc.py -m 'first' -p 'second' {correct}
2. $> python abc.py -p 'first' -m 'second' {correct}
3. $> python abc.py -m -p 'first' 'second' {Incorrect}
4. $> python abc.py 'first' -p 'second' {Incorrect}
我有更多像-m
,-p
这样的论点。检查传递的参数是否格式正确的最佳算法是什么。除了维护前一个参数的方法并基于它进行检查之外,我无法想到。
先谢谢你的帮助
安
答案 0 :(得分:7)
你不需要自己这样做,Python就像他们说的附带电池一样。标准库有两个用于解析命令行参数的模块:argparse用于python 2.7+,optparse用于2.6或更早版本。这些文档也有很好的用法示例。
答案 1 :(得分:1)
答案 2 :(得分:0)
这些模块很好,虽然它们对pylint不起作用,所以我倾向于使用自己的参数进行解析以获得更好的错误检测。 EG:
red = False
blue = False
green = False
red_weight = 1.0
green_weight = 1.0
blue_weight = 1.0
while sys.argv[1:]:
if sys.argv[1] in [ '-h', '--help' ]:
usage(0)
elif sys.argv[1] in [ '-r', '--red' ]:
red = True
elif sys.argv[1] in [ '-b', '--blue' ]:
blue = True
elif sys.argv[1] in [ '-g', '--green' ]:
green = True
elif sys.argv[1] == '--red-weight':
red_weight = float(sys.argv[2])
del sys.argv[1]
elif sys.argv[1] == '--green-weight':
green_weight = float(sys.argv[2])
del sys.argv[1]
elif sys.argv[1] == '--blue-weight':
blue_weight = float(sys.argv[2])
del sys.argv[1]
else:
sys.stderr.write('%s: unrecognized option: %s\n' % (sys.argv[0], sys.argv[1]))
usage(1)
del sys.argv[1]
HTH