機能は維持したいが、場所~/.python_history
を$XDG_DATA_HOME/python/python_history
。
これ私に次のアイデアを与えました。私はそれを作成して$XDG_CONFIG_HOME/python/pythonrc
指すことができます$PYTHONSTARTUP
。そこから関数を置き換えたいと思いますreadline.read_history_file
。readline.write_history_file
readline.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より大きくなるようにしてください。