`~/.python_history` 場所の変更

`~/.python_history` 場所の変更

機能は維持したいが、場所~/.python_history$XDG_DATA_HOME/python/python_history

これ私に次のアイデアを与えました。私はそれを作成して$XDG_CONFIG_HOME/python/pythonrc指すことができます$PYTHONSTARTUP。そこから関数を置き換えたいと思いますreadline.read_history_filereadline.write_history_filereadline.append_history_file

これらの関数をカスタムパラメータを含む関数自体で置き換える方法はありますかfilename

そうでなければ、この問題を解決する方法についての他のアイデアはありますか?

ベストアンサー1

あなたとctrl-alt-delorのように、私も神秘的でクリーンなホームディレクトリを見つけます。readline.write_history_file終了時に実行するように登録する呼び出しはsite.py次のとおりです(私のアーチシステムでは/usr/lib/python3.9/site.py)。

if readline.get_current_history_length() == 0:
    # If no history was loaded, default to .python_history.
    # The guard is necessary to avoid doubling history size at
    # each interpreter exit when readline was already configured
    # through a PYTHONSTARTUP hook, see:
    # http://bugs.python.org/issue5845#msg198636
    history = os.path.join(os.path.expanduser('~'),
                           '.python_history')
    try:
        readline.read_history_file(history)
    except OSError:
        pass

    def write_history():
        try:
            readline.write_history_file(history)
        except OSError:
            # bpo-19891, bpo-41193: Home directory does not exist
            # or is not writable, or the filesystem is read-only.
            pass

    atexit.register(write_history)

PYTHONSTARUPではこれを複製できますが、Python履歴のカスタム位置を使用します。これは私のものです(しかし、必要に応じて環境置換を使用して適切なXDGディレクトリを使用できると確信しています。)

import os
import atexit
import readline

history = os.path.join(os.path.expanduser('~'), '.cache/python_history')
try:
    readline.read_history_file(history)
except OSError:
    pass

def write_history():
    try:
        readline.write_history_file(history)
    except OSError:
        pass

atexit.register(write_history)

あなたできるwrite_history_file関数をオーバーライドしますが、これは非常に古くなっているので(カスタム引数の代わりに提供する引数を無視する必要があります)、これが最善の解決策だと思います。これがうまくいかない場合は、カスタムPython履歴ファイルにダミーエントリを作成して、履歴の長さが0より大きくなるようにしてください。

おすすめ記事