2

問題: いくつかの特定の引数を解析する必要があります。これらの引数は任意の順序で指定できますが、オプションではありません: -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))

問題の目的を達成するための改善やより良い例を誰かが提案できますか?

4

1 に答える 1

5

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]")
于 2012-10-18T09:18:06.647 に答える