2016-09-14 8 views
2

対話シェルを閉じた後でも永続履歴を保持するようにCMD module from Pythonを設定する方法はありますか?python cmdモジュールの永続履歴

私が上下のキーを押したとき、前回シェルで入力したコマンドにアクセスしたいと思います。このセッション中に入力したものだけでなく、Pythonスクリプトも実行しました。

その任意のヘルプcmdがreadline module

答えて

6

readlineから輸入set_completerを使用している場合は、自動的にあなたが入力したすべての履歴を保持。追加する必要があるのは、その履歴をロードして保存するためのフックだけです。

readline.read_history_file(filename)を使用して履歴ファイルを読み取ります。これまでに履歴を保持するようにreadlineに伝えるには、readline.write_history_file()を使用してください。あなたは際限なく成長しているから、このファイルを保つためにreadline.set_history_length()を使用することもできます。

import os.path 
try: 
    import readline 
except ImportError: 
    readline = None 

histfile = os.path.expanduser('~/.someconsole_history') 
histfile_size = 1000 

class SomeConsole(cmd.Cmd): 
    def preloop(self): 
     if readline and os.path.exists(histfile): 
      readline.read_history_file(histfile) 

    def postloop(self): 
     if readline: 
      readline.set_history_length(histfile_size) 
      readline.write_history_file(histfile) 

私はロードをトリガするCmd.preloop()Cmd.postloop()フックを使用して、コマンドループが開始および終了ポイントに保存します。

readlineがインストールされていない場合は、precmd() methodを追加して、これをシミュレーションして、入力したコマンドを自分で記録することができます。

+0

返信いただきありがとうございますので、既存の履歴リスト機能を変更して、私がしたいことはありませんか? – PJConnol

+0

@PJConnol: 'readline'ライブラリは補完機能のためにのみ使用されます。私は、(グローバルな)歴史のreadlineがここで役割を果たしているとは思いません。 –

+0

もう一度、大丈夫ですよ、ありがとう – PJConnol