概要
- Python コンソールで色々動かした後、実行ファイル化したい等あった時、実行コマンドをもう一度見たい!!
- モジュール「readline」を使えば簡単に解決。
前提
- (0) Python をコンソール実行して、何かコマンドを実行していた。例えば、フィボナッチ出力関数の作成。
- fib1 は失敗版。fib2 で正しいものを作った。
$ Python
>>> def fib1() :
... a = 1
... b = 1
... while ( True ) :
... buf = a
... a = b
... b += a
... yield b
...
>>> g = fib1()
>>> g.next()
2
>>> g.next()
4
>>> g.next()
8
>>>
>>> def fib2() :
... a = 0
... b = 1
... while ( True ) :
... buf = a
... a = b
... b += buf
... yield b
...
>>> g = fib2()
>>> g.next()
1
>>> g.next()
2
>>> g.next()
3
>>> g.next()
5
>>> g.next()
8
>>> g.next()
13
- (1) ここで、fib2 を実行ファイル化したくなった。履歴をたどるのは面倒…。
readline の使用
- (2) モジュール「readline」を使うことで、以前のログを全て表示することが可能。
- import 前のログ、Python コンソール実行時のものから出力される。
>>> import readline
>>> >>> for i in range( readline.get_current_history_length() ) :
... print readline.get_history_item(i)
...
None
def fib1() :
a = 1
b = 1
while ( True ) :
buf = a
a = b
b += a
yield b
g = fib1()
g.next()
def fib2() :
a = 0
b = 1
while ( True ) :
buf = a
a = b
b += buf
yield b
g = fib2()
g.next()
import readline
for i in range( readline.get_current_history_length() ) :
- ※ 繰り返し使った「g.next()」は履歴から引っ張ってきたものだったためか、履歴上では各一回ずつ実行したことになっている。
参考
- ググって見つけた stackoverflow の記事のものをそのまま。便利。