Pythonツール/ユーティリティ
標準ライブラリには、モジュールとしてもコマンドラインユーティリティとしても使用できる多数のモジュールが付属しています。
DISモジュール
disモジュールはPython逆アセンブラです。バイトコードを、人間が消費するのに少し適した形式に変換します。
コマンドラインから逆アセンブラを実行できます。指定されたスクリプトをコンパイルし、分解されたバイトコードをSTDOUTに出力します。disをモジュールとして使用することもできます。ザ・dis functionは、クラス、メソッド、関数、またはコードオブジェクトを単一の引数として受け取ります。
例
#!/usr/bin/python
import dis
def sum():
vara = 10
varb = 20
sum = vara + varb
print "vara + varb = %d" % sum
# Call dis function for the function.
dis.dis(sum)
これにより、次の結果が生成されます-
6 0 LOAD_CONST 1 (10)
3 STORE_FAST 0 (vara)
7 6 LOAD_CONST 2 (20)
9 STORE_FAST 1 (varb)
9 12 LOAD_FAST 0 (vara)
15 LOAD_FAST 1 (varb)
18 BINARY_ADD
19 STORE_FAST 2 (sum)
10 22 LOAD_CONST 3 ('vara + varb = %d')
25 LOAD_FAST 2 (sum)
28 BINARY_MODULO
29 PRINT_ITEM
30 PRINT_NEWLINE
31 LOAD_CONST 0 (None)
34 RETURN_VALUE
PDBのモジュール
pdbモジュールは標準のPythonデバッガーです。これは、bdbデバッガフレームワークに基づいています。
コマンドラインからデバッガーを実行できます(n [またはnext]と入力して次の行に移動し、使用可能なコマンドのリストを取得します)-
例
実行する前に pdb.py、Pythonlibディレクトリへのパスを適切に設定します。それでは、上記の例で試してみましょうsum.py −
$pdb.py sum.py
> /test/sum.py(3)<module>()
-> import dis
(Pdb) n
> /test/sum.py(5)<module>()
-> def sum():
(Pdb) n
>/test/sum.py(14)<module>()
-> dis.dis(sum)
(Pdb) n
6 0 LOAD_CONST 1 (10)
3 STORE_FAST 0 (vara)
7 6 LOAD_CONST 2 (20)
9 STORE_FAST 1 (varb)
9 12 LOAD_FAST 0 (vara)
15 LOAD_FAST 1 (varb)
18 BINARY_ADD
19 STORE_FAST 2 (sum)
10 22 LOAD_CONST 3 ('vara + varb = %d')
25 LOAD_FAST 2 (sum)
28 BINARY_MODULO
29 PRINT_ITEM
30 PRINT_NEWLINE
31 LOAD_CONST 0 (None)
34 RETURN_VALUE
--Return--
> /test/sum.py(14)<module>()->None
-v dis.dis(sum)
(Pdb) n
--Return--
> <string>(1)<module>()->None
(Pdb)
プロファイルモジュール
プロファイルモジュールは、標準のPythonプロファイラーです。コマンドラインからプロファイラーを実行できます-
例
次のプログラムのプロファイルを作成してみましょう-
#!/usr/bin/python
vara = 10
varb = 20
sum = vara + varb
print "vara + varb = %d" % sum
今、実行してみてください cProfile.pyこのファイルsum.pyに対して次のように-
$cProfile.py sum.py
vara + varb = 30
4 function calls in 0.000 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 sum.py:3(<module>)
1 0.000 0.000 0.000 0.000 {execfile}
1 0.000 0.000 0.000 0.000 {method ......}
tabnannyのモジュール
tabnannyモジュールは、Pythonソースファイルにあいまいなインデントがないかチェックします。ファイルがインデントを捨てるような方法でタブとスペースを混在させている場合、使用しているタブサイズに関係なく、乳母は文句を言います-
例
次のプログラムのプロファイルを作成してみましょう-
#!/usr/bin/python
vara = 10
varb = 20
sum = vara + varb
print "vara + varb = %d" % sum
tabnanny.pyで正しいファイルを試してみると、次のように文句を言うことはありません-
$tabnanny.py -v sum.py
'sum.py': Clean bill of health.