我一直在尝试找出如何在ptpython
控制台中保存和读取Python命令的历史记录,但是一直没有成功。到目前为止,我的所有努力都是基于这个答案的变化。然而,我仍然无法读取我的历史记录。
我希望能够简单地按下↑和↓箭头,浏览以前控制台会话中的Python命令(而不是我当前所在的控制台会话)。以下是我当前在$PYTHONSTARTUP
文件中拥有的内容:
# 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=/home/user/.pystartup" in bash.
#
# Note that PYTHONSTARTUP does *not* expand "~", so you have to put in the
# full path to your home directory.
import atexit
import os
import readline
import rlcompleter
import sys
try:
from ptpython.repl import embed
except ImportError:
print('ptpython is not available: falling back to standard prompt')
else:
sys.exit(embed(globals(), locals()))
historyPath = os.path.expanduser("~/.ptpython/history")
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)
readline.parse_and_bind('tab: complete')
del os, atexit, readline, rlcompleter, save_history, historyPath
我的$PYTHONSTARTUP
变量是:
$ echo $PYTHONSTARTUP
/Users/[redacted]/.pystartup
我正在使用Python 3.7.3,macOS 10.14.6和ptpython 2.0.4。
谢谢。
sys.exit(embed())
,所以在这一行后它不能运行代码,因此无法读取历史记录。 你必须在sys.exit(embed())
前读取它。 如果你在sys.exit(embed())
后面加上print()
,那么你会发现它永远不会被打印。 - furasptpython
,则保存历史记录的潜在目录包括.local/share/ptpython
和~/.ptpython
。 - butla