在实际写入文件之前,我会多次使用Python解释器检查变量并逐步执行命令。但是到最后我在解释器中有大约30个命令,并且必须将它们复制/粘贴到文件中才能运行。有没有办法可以将Python解释器历史记录导出/写入文件?
例如
>>> a = 5
>>> b = a + 6
>>> import sys
>>> export('history', 'interactions.py')
然后我可以打开interactions.py
文件并阅读:
a = 5
b = a + 6
import sys
答案 0 :(得分:23)
IPython非常有用。例如,对于您的用例,有save命令,您只需输入save my_useful_session 10-20 23将输入行10到20和23保存到my_useful_session.py。 (为了帮助解决这个问题,每一行都以其编号为前缀)
查看文档页面上的视频,快速了解这些功能。
:: OR ::
有一个way来做。将文件存储在〜/ .pystartup
中# 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
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
您也可以添加此项以免费获得自动填充功能:
readline.parse_and_bind('tab: complete')
请注意,这仅适用于* nix系统。由于readline仅适用于Unix平台。
答案 1 :(得分:12)
如果您使用的是Linux / Mac并且有readline库,则可以将以下内容添加到文件中并将其导出到.bash_profile
中,您将同时拥有完成和历史记录。
# python startup file
import readline
import rlcompleter
import atexit
import os
# tab completion
readline.parse_and_bind('tab: complete')
# history file
histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
try:
readline.read_history_file(histfile)
except IOError:
pass
atexit.register(readline.write_history_file, histfile)
del os, histfile, readline, rlcompleter
导出命令:
export PYTHONSTARTUP=path/to/.pythonstartup
这将在〜/ .pythonhistory
中保存您的python控制台历史记录答案 2 :(得分:5)
以下不是我自己的工作,但坦率地说我不记得我第一次得到它...但是:将以下文件(在GNU / Linux系统上)放在你的主文件夹中(文件名)应该是.pystartup.py
):
# 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, e.g. "export PYTHONSTARTUP=/max/home/itamar/.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
historyPath = os.path.expanduser("~/.pyhistory")
historyTmp = os.path.expanduser("~/.pyhisttmp.py")
endMarkerStr= "# # # histDUMP # # #"
saveMacro= "import readline; readline.write_history_file('"+historyTmp+"'); \
print '####>>>>>>>>>>'; print ''.join(filter(lambda lineP: \
not lineP.strip().endswith('"+endMarkerStr+"'), \
open('"+historyTmp+"').readlines())[-50:])+'####<<<<<<<<<<'"+endMarkerStr
readline.parse_and_bind('tab: complete')
readline.parse_and_bind('\C-w: "'+saveMacro+'"')
def save_history(historyPath=historyPath, endMarkerStr=endMarkerStr):
import readline
readline.write_history_file(historyPath)
# Now filter out those line containing the saveMacro
lines= filter(lambda lineP, endMarkerStr=endMarkerStr:
not lineP.strip().endswith(endMarkerStr), open(historyPath).readlines())
open(historyPath, 'w+').write(''.join(lines))
if os.path.exists(historyPath):
readline.read_history_file(historyPath)
atexit.register(save_history)
del os, atexit, readline, rlcompleter, save_history, historyPath
del historyTmp, endMarkerStr, saveMacro
然后你将获得所有带有bash shell的东西(上下箭头导航历史记录,ctrl-r进行反向搜索等等。)
您的完整命令历史记录将存储在位于~/.pyhistory
的文件中。
我从小就使用这个,我从来没有遇到过问题。
HTH!
答案 3 :(得分:1)
自提出此问题以来,过去8年中发生了许多变化。
看来,自Python 3.4起,历史记录会作为纯文本文件自动写入~/.python_history
。
如果您要禁用它或了解更多信息,请查看
当然,正如许多其他人所指出的那样,IPython具有保存,搜索和处理历史记录的强大功能。通过%history?
答案 4 :(得分:0)
Linux上的Python应该通过readline库提供历史记录支持,请参阅http://docs.python.org/tutorial/interactive.html
答案 5 :(得分:0)
在ipython shell中:
%history
该命令将打印您在当前python shell中输入的所有命令。
% history -g
该命令会将记录在python shell中的所有命令打印到相当多的行。
%history -g -f history.log
将记录的命令与行号一起写入。您可以使用gvim删除感兴趣的命令的固定宽度行号。
答案 6 :(得分:0)
为什么要编写解释器中的代码 到python文件?您使用解释器来测试您的代码,因此您可以在程序中编写相同的代码。或者,您可以创建自己的解释器,将命令保存在文件中。
#shell.py
import code, sys
class Shell(code.InteractiveConsole):
def write(self, s):
open("history.cmd", "a").write(f"{s}\n")
sys.stderr.write(f"{s}")
def raw_input(self, prompt):
a = input(prompt)
open("history.cmd", "a").write(f"{prompt}{a}\n")
return a
if __name__ == "__main__": # run the program only if runned
shell = Shell(filename="<stdin>") #you can use your own filename
shell.interact()
您可以在自己的类中继承该类并创建自己的解释器!