【问题标题】:Python 2.6 - Parse argumentsPython 2.6 - 解析参数
【发布时间】:2012-10-08 16:54:33
【问题描述】:

问题:需要解析一些可以按任意顺序排列的特定参数,非可选参数:-h -d -src -dst

我是 Python 新手,已经研究过 getopt 和 argparse 等替代方案,但找不到一个可行的示例,因此按照以下方式进行自定义;

argv=sys.argv[1:]
args=[]
for idx, arg in enumerate(argv):
    # if is arg
    if arg.startswith("-"):
        # find arg match
        for i in ("-h","-d:","-src:","-dst:"):
            # requires var
            if i == arg + ':' and idx < len(argv)-1:
                if not argv[idx+1].startswith("-"):
                    args.append((arg,argv[idx+1]))
                    break
            # no var
            elif i == arg:
                args.append((arg,""))
                break
    else:
        continue
# may contain duplicates
print(args)
# no dupes
print(set(args))

谁能提出改进和/或更好的例子来实现问题目标?

【问题讨论】:

  • 我觉得值得一提的是,你所采取的策略也是值得尊重的。一种改进可能是在收到无法识别的参数(不以“-”开头)或选项(以“-”开头)时抱怨。
  • @avasal 读得很好,确实很有帮助,谢谢!

标签: python arguments python-2.6 argparse


【解决方案1】:

在 python 2.6 中有一个名为optparse的模块

你想要什么。

文档中的示例:

from optparse import OptionParser
[...]
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
                  help="write report to FILE", metavar="FILE")
parser.add_option("-q", "--quiet",
                  action="store_false", dest="verbose", default=True,
                  help="don't print status messages to stdout")

(options, args) = parser.parse_args()

另一个例子:

usage = "usage: %prog [options] arg1 arg2"
parser = OptionParser(usage=usage)
parser.add_option("-v", "--verbose",
                  action="store_true", dest="verbose", default=True,
                  help="make lots of noise [default]")
parser.add_option("-q", "--quiet",
                  action="store_false", dest="verbose",
                  help="be vewwy quiet (I'm hunting wabbits)")
parser.add_option("-f", "--filename",
                  metavar="FILE", help="write output to FILE")
parser.add_option("-m", "--mode",
                  default="intermediate",
                  help="interaction mode: novice, intermediate, "
                       "or expert [default: %default]")

【讨论】:

  • 忽略了 optparse,因为它自 v2.7 以来已被弃用,但仍与使用 v2.6 相关
  • 请注意任何其他试图找出最重要位的人:options 是一个对象,您的参数作为属性添加。在上面的示例中,args 被放入 options.filenameoptions.verbose
猜你喜欢
  • 2011-07-11
  • 1970-01-01
  • 2012-12-30
  • 2019-08-23
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 2012-03-03
  • 2018-08-01
相关资源
最近更新 更多