モブ沢工房

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか3Dプリンタやら日曜大工等、色々。

python版の簡易ヘルプ表示機能 with getoptモジュール

pythonではgetoptモジュールでコマンドライン引数の処理ができますね。 それを使ったコードの中に、以前シェルスクリプト向けに作った簡易ヘルプ表示機能を実現してみました。

あまりpythonらしくない冗長なコードですがオイラの場合、いつものことです。動けばよかろうなのだァーッ!

import getopt,sys
try:
    shortcmd="ho:"
    longcmd=["help","option="]
    opts,args=getopt.getopt(sys.argv[1:],shortcmd,longcmd)
    if len(opts)==0 and len(args)>1:
        firstarg=args[0]
        opts,args=getopt.getopt(sys.argv[2:],shortcmd,longcmd)
        args.append(firstarg)

except getopt.GetoptError,e:
    # something getopterror happen
    print(str(e))
    sys.exit(1)
except IndexError:
    # no argument assigned 
    pass

for cmd,cmdarg in opts:

    if cmd=='-h' or cmd=='--help':
        import re,os
        ro=re.compile('^\s*#-+#\s*$')
        ofname=os.path.realpath(__file__)
        if ofname[-1]=='c':
            ofname=ofname[:-1]
        with open(ofname,'rt') as fp:
            cnt=0
            for cl in fp.readlines():
                if cnt==1:
                    print cl.rstrip()
                m=ro.search(cl)
                if m:
                    cnt+=1
        sys.exit(0)
    #--------------------#
    elif cmd in ('-o','--option'):
        print("option=%s" % cmdarg)
    else:
        pass

    #--------------------#

これで#---#に挟まれた部分に次々にコマンドラインオプションの処理を書いていき…その部分が--helpオプションで表示される部分になります。

ユーザー=未来の自分自身は、--helpオプションを与えることで、そこに書かれたソースコードのコメントや処理などからどんなオプションなのか知る、ということにしております。

ブログのカテゴリ的には実はむしろライフハックかも。

これを自作のvimコードスニペットプラグインで、コード内にペタって貼り付けてひな形にしてます。 vimスニペットプラグインは多種多様なものがあるのですが自分の場合、コードスニペットがほしくなった時点では、どうもしっくり来るものが無く*1、自作してしまいました。あまりに原始的かついい加減なものなので公表はしないでしょう…

*1:毎度ながら、探し方が足りない可能性が大