2014年7月14日月曜日

ちょっとしたツールを作るのに便利なPythonのcmdモジュールを使うための3ステップ

シンプルなコマンドラインツールが必要なとき、Pythonのcmdモジュールが有力な選択肢になります。ツールを実装するために必要な3ステップを紹介します。
  1. cmd.Cmdクラスを継承したクラスを作る
  2. do_XXXメソッドを定義する
  3. cmdloopメソッドを呼ぶ
cmd.Cmdクラスを継承したクラスを作る
特に言うべきことはありません。普通に継承するだけです。
class HelloCmd(cmd.Cmd):
...

do_XXXメソッドを定義する
メソッド名の"XXX"がコマンドになります。
パラメータを受け取るためのargパラメータがポイントです。
    def do_hello(self, arg):
        print 'hello, ' + str(arg)

cmdloopメソッドを呼ぶ
クラスをインスタンス化し、cmdloopを呼ぶとREPLがスタートします。
終了するにはCtrl-Cで落とします。
>>> HelloCmd().cmdloop()
(Cmd) hello Taro
Hello, Taro
(Cmd) Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib/python2.7/cmd.py", line 130, in cmdloop
    line = raw_input(self.prompt)
KeyboardInterrupt

以下Tips。必須ではありませんが、知っておくと便利です。
キレイに終了するには
Ctrl-Cで無理やり落とすのはスマートじゃありません。終了するためのメソッドを定義すれば、キレイに終了します。終了するには、Trueを返します。
    def do_quit(self, arg):
        print 'bye'
        return True
...
>>> HelloCmd().cmdloop()
(Cmd) quit
bye

docstringがヘルプになる
do_XXXメソッドにdocstringを書いておくと、helpコマンドから参照できます。
    def do_quit(self, arg):
        '''quit cmd loop.'''
        print 'bye'
        return True
...
>>> HelloCmd().cmdloop()
(Cmd) help quit
quit cmd loop.

参考
cmd — Support for line-oriented command interpreters

0 件のコメント:

コメントを投稿