37

セッション間で実行されたコマンドの履歴を保持するようにインタラクティブなPythonシェルに指示する方法はありますか?

セッションの実行中、コマンドが実行された後、上向き矢印を使用して上記のコマンドにアクセスできます。次にPythonシェルを使用するまで、これらのコマンドの特定の数を保存する方法があるかどうか疑問に思っています。 。

前回のセッションの最後に使用したコマンドをセッションで再利用しているので、これは非常に便利です。

4

3 に答える 3

42

確かに、小さな起動スクリプトでできます。Pythonチュートリアルのインタラクティブな入力編集と履歴置換から:

# Add auto-completion and a stored history file of commands to your Python
# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is
# bound to the Esc key by default (you can change it - see readline docs).
#
# Store the file in ~/.pystartup, and set an environment variable to point
# to it:  "export PYTHONSTARTUP=~/.pystartup" in bash.

import atexit
import os
import readline
import rlcompleter

historyPath = os.path.expanduser("~/.pyhistory")

def save_history(historyPath=historyPath):
    import readline
    readline.write_history_file(historyPath)

if os.path.exists(historyPath):
    readline.read_history_file(historyPath)

atexit.register(save_history)
del os, atexit, readline, rlcompleter, save_history, historyPath

Python 3.4以降、インタラクティブインタープリターはオートコンプリートと履歴をすぐにサポートします

タブ補完は、をサポートするシステムのインタラクティブインタプリタでデフォルトで有効になりましたreadline。履歴もデフォルトで有効になっており、ファイルに書き込まれます(ファイルから読み取られます)~/.python-history

于 2012-09-08T20:47:13.417 に答える
17

IPythonを使用します。

とにかく、それは素晴らしいので、あなたはすべきです:永続的なコマンド履歴は、ストックのPythonシェルよりも優れている多くの方法の1つにすぎません。

于 2012-09-08T20:45:16.723 に答える
1

これは、仮想環境を使用するPython3でも必要です。

仮想環境ごとに履歴ファイルを保持するわずかに異なるバージョンを使用します。

import sys

if sys.version_info >= (3, 0) and hasattr(sys, 'real_prefix'):  # in a VirtualEnv
    import atexit, os, readline, sys

    PYTHON_HISTORY_FILE = os.path.join(os.environ['VIRTUAL_ENV'], '.python_history')
    if os.path.exists(PYTHON_HISTORY_FILE):
        readline.read_history_file(PYTHON_HISTORY_FILE)
    atexit.register(readline.write_history_file, PYTHON_HISTORY_FILE)
于 2018-07-17T08:22:42.173 に答える