コマンドライン引数

C言語ではコマンドラインオプションの引数を扱う場合、「getopt()」って関数があったと思うんだが、Pythonにも同様のものがあったね。うれしいよ。

import sys
import getopt

def main(argv):
  try:
    opts, args = getopt.getopt(argv, "ho:d", ["help", "outfile="])
  except getopt.GetoptError:
    sys.exit(2)

  for opt, arg in opts:
    if opt in ("-h", "--help"):
      # help
      pass
    elif opt == "-d":
      # debug on/off
      pass
    elif opt in ("-o", "--outfile"):
      # out file
      pass

if __name__ == '__main__':
  main(sys.argv[1:])

凄い簡単だと思う。ロングオプションにも簡単に対応できるってのが良いよね。それも「-h」や「-o」だけじゃなく「-ho」にもきちんと対応している。素晴らしい。ところで「-hod filename」ってやったらどうなるんだろう。試してないな、やってみよ。

>>> import getopt
>>> arglist = '-h -d -o filename'.split()
>>> arglist
['-h', '-d', '-o', 'filename']
>>> optlist, args = getopt.getopt(arglist, 'ho:d', ['help', 'outfile=', 'debug'])
>>> optlist
[('-h', ''), ('-d', ''), ('-o', 'filename')]
>>>

正しい動き。

>>> arglist = '-hod filename'.split()
>>> arglist
['-hod', 'filename']
>>> optlist, args = getopt.getopt(arglist, 'ho:d', ['help', 'outfile=', 'debug'])
>>> optlist
[('-h', ''), ('-o', 'd')]
>>>

ま、そうなるわな〜

>>> arglist = '-hdo filename'.split()
>>> arglist
['-hdo', 'filename']
>>> optlist, args = getopt.getopt(arglist, 'ho:d', ['help', 'outfile=', 'debug'])
>>> optlist
[('-h', ''), ('-d', ''), ('-o', 'filename')]
>>>

これは上手くいった。ある程度予想は出来たけど・・・パラメータが必要なオプションは他のオプションと分離した方が良いよね。ってのは常識?

Pythonの「getopt()」は直感的にわかりやすく利用しやすいね。以上