如何仅导出python -i交互式会话的当前会话命令历史?
解决python -i仅导出当前会话命令历史的问题
默认情况下,python -i会读取之前会话保存的历史记录(通常来自~/.python_history文件),导致write_history_file导出时包含旧会话内容。以下几种方法可以只导出当前会话的命令:
方法1:启动时直接清空历史
启动交互式解释器时,先执行清空历史的命令,确保当前会话历史从零开始:
python -c "import readline; readline.clear_history()" -i
进入会话后执行你需要的命令,再调用write_history_file('history.txt'),导出的文件就只有当前会话的内容。
方法2:会话内手动清空历史
如果已经进入了python -i会话,先执行清空操作,再执行目标命令:
import readline readline.clear_history() # 执行你的业务命令 from pathlib import Path x = Path('abc') # 导出历史 from readline import write_history_file write_history_file('history.txt')
方法3:精准截取当前会话新增历史
如果不想清空原有历史,可记录会话启动时的历史长度,只导出之后新增的命令:
import readline # 记录会话启动时的历史条目数 start_history_count = readline.get_current_history_length() # 执行你的命令 from pathlib import Path x = Path('abc') # 导出当前会话新增的历史 with open('history.txt', 'w') as f: # 从start_history_count+1开始遍历到最新的历史条目 for idx in range(start_history_count + 1, readline.get_current_history_length() + 1): f.write(f"{readline.get_history_item(idx)}\n")
原理说明
readline模块的历史记录是跨会话累积的,默认启动时会加载本地保存的历史文件。通过清空历史或截取会话启动后的新增条目,就能实现仅导出当前会话命令的需求。
内容的提问来源于stack exchange,提问作者SultanOrazbayev
相关产品推荐
相关产品推荐

