pyconjpで発表されていたClimeが便利そう

PyConJP – YouTubeなんてものがあった! というわけでじろじろ見ています。

そこになんか可愛い子が映っていたので見てみたら、climeという簡単にCLIコマンドを作れちゃうライブラリについてお話しをされていました。

clime 0.1.4 : Python Package Index
Introduction — Clime v0.1.4 documentation

このライブラリはargparseでごちゃごちゃ書かなくても、import clime.now するだけで、簡単にコマンドのヘルプ付きのCLIコマンドが作れちゃう、というものです。

command.py というお試しファイルを作ってみます。
[python]
#!/usr/bin/env python
# -*- coding: utf-8 -*-

def runserver_1(host, port):
print ‘run server 1’

def runserver_2(host, port=80):
"""こんなコマンドです

options:
-h HOST, –host=HOST こっちは必須です。
-p PORT, –port=PORT こっちはデフォルトの値付きの任意引数です。
"""
print ‘run server 2 host={0}, port={1}’.format(host, port)

if __name__ == ‘__main__’:
import clime.now

[/python]

作ったコマンドを試してみる。

[bash]

まずは何も引数を入れてないで実行してみる。
~/tmp% python command.py
usage: runserver_1 HOST PORT
or: runserver_2 [–port PORT | -p PORT] HOST

ヘルプを見てみる。
~/tmp% python command.py –help
usage: runserver_1 HOST PORT
or: runserver_2 [–port PORT | -p PORT] HOST

runserver_1のヘルプを見てみる。
~/tmp% python command.py runserver_1 –help
usage: runserver_1 HOST PORT

runserver_2のヘルプを見てみる。
~/tmp% python command.py runserver_2 –help
usage: runserver_2 [–port PORT | -p PORT] HOST

こんなコマンドです

options:
-h HOST, –host=HOST こっちは必須です。
-p PORT, –port=PORT こっちはデフォルトの値付きの任意引数です。

存在しないコマンドを実行してみる。
~/tmp% python command.py runserver_1000
usage: runserver_1 HOST PORT
or: runserver_2 [–port PORT | -p PORT] HOST

runserver_2を実行してみる。
~/tmp% python command.py runserver_2
command.py: runserver_2() takes at least 1 argument (1 given)

runserver_2に余計な引数を入れてみる。
~/tmp% python command.py runserver_2 1 2 3 4 5 6
command.py: runserver_2() takes at most 2 arguments (7 given)

まともに引数hostを入れてみる。
~/tmp% python command.py runserver_2 0.0.0.0
run server 2 host=0.0.0.0, port=80

portを-pで入れてみる。
~/tmp% python command.py runserver_2 -p 8080 0.0.0.0
run server 2 host=0.0.0.0, port=8080

portを–port=で入れてみる。
~/tmp% python command.py runserver_2 –port=1234 0.0.0.0
run server 2 host=0.0.0.0, port=1234

[/bash]

うむ。便利。
argparseっていつも使い方を忘れちゃってヘルプを見て悩むから、これですむならコレでいい(・v・!