コマンドライン引数
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()」は直感的にわかりやすく利用しやすいね。以上