雑食性雑感雑記

知識の整理場。ため込んだ知識をブログ記事として再構築します。

Python コンソール実行コマンド一覧を表示

概要

  • 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()」は履歴から引っ張ってきたものだったためか、履歴上では各一回ずつ実行したことになっている。

参考