1

我正在尝试使用 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。检查传递的参数是否格式正确的最佳算法是什么。除了维护先前参数并基于它进行检查的方法之外,我无法思考。

感谢您提前提供帮助

安吉

4

3 回答 3

7

你不需要自己做,正如他们所说的 Python 附带电池。标准库有两个用于解析命令行参数的模块:用于 python 2.7+的argparse和用于 2.6 或更早版本的optparse 。这些文档也有很好的使用示例。

于 2012-04-29T07:28:44.463 回答
1

使用 argparse 模块http://docs.python.org/library/argparse.html#module-argparse

于 2012-04-29T07:24:52.857 回答
0

这些模块很好,虽然它们不能很好地与 pylint 配合使用,所以我倾向于进行自己的参数解析以获得更好的错误检测。例如:

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]

高温高压

于 2012-04-29T21:30:14.903 回答