「【PythonのHELP】Pythonにはhelp()関数有ったんだぁ」で紹介した、Pythonモジュールの__doc__を表示してくれる関数は便利なのだが、いくつか使い辛いことがある。
Pythonのhelp()関数の実行は基本的にPythonの対話モードでの手入力利用を想定したものなので、基本的な使い方は次の通りとなる。
[root@l22dm ~]# /usr/local/bin/python2.6
Python 2.6.4 (r264:75706, Nov 5 2009, 23:51:30)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mire.htm
>>> help(mire.htm)
Help on module mire.htm in mire:
NAME
mire.htm
FILE
/usr/local/lib/python2.6/site-packages/mire/htm.py
DESCRIPTION
######################################################################
#00. header(Type) : cgi Content出力。Type:'html'(既定),'xml'
#01. html_header(charset, : html文書の開始タグ一式を標準出力します
# ,title,base :
# ,refresh :
# ,cache,robot:
# ,css,style :
# ,js,author :
# ,generator :
# ,copyright :
# ,keywords :
# ,description:
# ,body) : bodyつまり文書全体の属性定義をリスト付与
#02. html_footer() : html文書の終了タグ一式を標準出力
#03. url2str_list(url) : urlの示す文書を文字列リストで返します
#04. url2str(url,trim=0) : urlを文字列で返します。前後空白除去trim=1
#05. get_charset(s) : str文字列からmeta定義のcharsetを返します
#06. str2unicode(s,charset) : 文字列のunicode化を試みその文字列を返します
#07. cgi_params() : CGI引数を辞書化し返します
#08. param_lst(omit_params : 引数とその値をGET形式'引数名=値'文字列listを
# ,params_dic): 返す「url+'?'+'&'.join()」で活用
#09. tag_encode(lines) : タグ文字のままHTML表示可能な文字列listに変換
#10. display_err(locals() : HTMLヘッダを伴ない、例外発生時の変数状況を
# ,title): locals()で、titleに仕掛けた場所を入れ利用。
#11. pipe(url,Type='xml') : 指定URIを読みそのまま返します。ドメイン外部の
# XMLコンテンツをjavascript活用する中継プログラム
FUNCTIONS
cgi_params()
## CGI引数の辞書化 ##
cgi.FieldStorage()で得られるcgi引数を辞書に収め返す
辞書構造とすることで修正が可能になる他、
必要な既存の引数を引継ぎインタラクティブにページを変化
させるときに便利。
【使い方】
下記の様に引数名を keys()で取得、順不同の為、必要より、
sort()の上、引数名を1つずつ取出し活用すると良い
param_dic = cgi_params()
keys = param_dic.keys()
for k in keys:
value = param_dic[k]
print k,value
:
up downカーソルキーで行送り
またはCtrl+F/Bキーで頁送りして
モジュールの仕様を調べ、
Ctrl+Zで終了
[root@l22dm ~]#
まあ、TelnetまたはSSHの窓を別に開いて叩けば大した手順ではないのでこれでも構わないが、複数回手打ちしていると、モジュール名を2回手打ちしないとならないことと毎回利用するpythonを指定して起動させるのが嫌になってしまう。
で、Pythonの動的importと引数渡しの機能 を活用し「hlpy <モジュール名>」で実行出来る様にして試た。使って試ると結構軽快に使えるので、例えば「hlpy os.path」等として関数名を確認したりするまに使っている。慣れて来ると、日本語でなくても良ければ標準モジュールの利用もこれで充分だ。
ソースコードとその導入方法は以下の通り。
/usr/local/bin/hlpy
#!/usr/local/bin/python2.6
# -*- coding:UTF-8 -*-
"""
# モジュール名指定のみでそのモジュールのヘルプを表示するコマンドスクリプト
"""
__author__ = 'Mire in Japan'
__copyright__ = 'Copyright (c) 2010 Mire'
__license__ = 'GPL'
__url__ = 'http://pythonlife.seesaa.net/article/144859313.html'
__version__ = '0.0.1'
def hlp(m):
"""
動的に指定したモジュールをimportしhelp()関数を実行
"""
__import__(m) #動的に指定したモジュールをimport
help(m) #対話モード利用を想定したPython標準のhelp()関数
from sys import argv #sysモジュール内のコマンド実行時の引数リストargvをimport
from os.path import basename #os.pathモジュール内のpathの最後の名前を返す
#basename関数をimport
if len(argv)==2: #引数が2つまり、引数が1つのみ指定されていたら
hlp(argv[1]) #その引数をモジュール名として hlp()関数を実行
else: #そうでないなら、
print 'Python\'s HELP Script' #プログラム名と
print basename(argv[0]),
print __version__
print __doc__, #このスクリプトの__doc__と
print '\nUSAGE:' #使い方を表示
print '%s <module name>' % (basename(argv[0]))
print 'STATUS:'
print 'argv=', argv
導入手順
- 上記ソースコードを「/usr/local/bin/hlpy」として、utf-8で保存する
- 「chmod 755 /usr/local/bin/hlpy」として、スクリプトとして直接実行可能なファイルにする。
でも、Windowsの場合、
sys.setdefaultencoding('UTF-8')でなく、OSの標準表示文字コードであるShift_JIS系に変更して、helpすると良いだろう。当方の場合は、Windowsで作るときも、SSHでLinux側を使うのでこの対策は不要である。また、やらずに書いて申し訳ないが、未使用のPython環境がない時には、virtualenvの利用で個別のPython環境を構築するのも良い選択なのかもしれない。
尚、余談ながら、例として使った最近のmire.htmlモジュールも近々、公開させて頂くつもりなので興味のある方は待っていて欲しい。