我发现自己经常使用Python解释器与数据库,文件等工作 - 基本上很多半结构化数据的手动格式。我不妥善保存和经常因为我想清理有用位。有没有办法救我输入到外壳(DB连接,变量赋值,有点逻辑的循环和位) - 交互式会话的一些历史?如果我使用类似script
我得到太多的标准输出噪声。我并不真的需要腌制的所有对象 - 尽管如果是这样做,这将是确定的解决方案。理想我也只是留下了跑,因为我互动中创建一个脚本,我可以删除我并不需要的位。是否有一个包,这样做,或一个DIY的方法吗?
更新:我在这些包的质量和有效性感到惊讶。对于那些有类似痒:
我转换,这些确实填写翻译和编辑之间的需求。
如果你喜欢使用的互动环节IPython是非常有用的。例如,对于您的使用情况有the %save
magic command,你只需输入%save my_useful_session 10-20 23
保存输入线10至20及23至my_useful_session.py
(来解决这个问题,每一行是由它的编号前缀)。
此外,该文件规定:
此功能使用相同的语法,%history输入范围,然后保存行到您指定的文件名。
这使得例如,引用旧的会话,如
%save current_session ~0/
%save previous_session ~1/
看看the videos on the presentation page获得的功能的简要介绍。
至于Linux的推移,人们可以使用script
命令来记录整个会话。这是util-linux
包的一部分,所以应该是大多数Linux系统。您可以创建和别名或函数,将调用script -c python
和将被保存到一个文件typescript
。例如,这里有一个这样的文件的翻版。
$ cat typescript
Script started on Sat 14 May 2016 08:30:08 AM MDT
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'Hello Pythonic World'
Hello Pythonic World
>>>
Script done on Sat 14 May 2016 08:30:42 AM MDT
这里的小缺点是script
记录一切,甚至是线的饲料,只要你打退格等,所以你可能需要使用col
清理输出(见this post on Unix&Linux Stackexchange)。
还有另一种选择--- pyslice。在“wxPython的2.8文档演示和工具”,有一个名为“pyslices”一个开源程序。
你可以使用它像一个编辑器,它也支持使用像一个控制台----执行各行像即时回声交互式解释。
当然,代码和每个块的结果的所有块将被自动记录到一个txt文件。
的结果记录只是的代码对应的块的后面。很方便。
该%history
命令是真棒,但不幸的是它不会让您保存的东西是贴%倒是到sesh。要做到这一点,我认为你必须做%logstart
at the beginning(虽然我还没有证实这工作)。
我喜欢做的是
%history -o -n -p -f filename.txt
这将节省每个输入(O,N,和P的选项)前的输出,行号,和“>>>”。请参阅%的历史here的文档。
有些评论是询问如何所有的IPython的输入保存一次。对于折节省在IPython的魔法,可以编程方式保存所有的命令如下所示,以避免提示消息,并且还避免指定输入数字。 currentLine = LEN(In)的-1%节省-f my_session 1- $ currentLine
该-f
选项用于强制替换文件和len(IN)-1
显示IPython的电流输入提示,让您以编程方式保存整个会话。
对于使用spacemacs
,并ipython
附带python-layer
,拯救魔法那些创造了很多不必要的输出,因为不断自动完成指令的底色,如工作:
len(all_suffixes)
';'.join(__PYTHON_EL_get_completions('''len'''))
';'.join(__PYTHON_EL_get_completions('''all_substa'''))
len(all_substantives_w_suffixes)
';'.join(__PYTHON_EL_get_completions('''len'''))
';'.join(__PYTHON_EL_get_completions('''all'''))
';'.join(__PYTHON_EL_get_completions('''all_'''))
';'.join(__PYTHON_EL_get_completions('''all_w'''))
';'.join(__PYTHON_EL_get_completions('''all_wo'''))
';'.join(__PYTHON_EL_get_completions('''all_wor'''))
';'.join(__PYTHON_EL_get_completions('''all_word'''))
';'.join(__PYTHON_EL_get_completions('''all_words'''))
len(all_words_w_logograms)
len(all_verbs)
为了避免这种只保存IPython的缓冲就像你通常保存任何其他:spc f s
我想建议另一种方式,通过在Linux上TMUX保持蟒蛇会议。您运行TMUX,附上你的自我,你打开的会话(如果直接打开它后不附后)。执行Python和你正在做的就可以了什么。然后从会话分离。从TMUX会话分离不关闭会话。会话保持打开状态。
这种方法的优点:您可以从任何其他设备连接到该会话(如果你可以ssh你的电脑)
这种方法的缺点:直到你实际存在的Python解释这种方法不放弃通过打开的Python会话使用的资源。
为了节省输入和输出上的Xubuntu:
Terminal
并在下拉寻找save contents
我觉得这节省了输入和输出,将所有的方式回到当我打开终端。这是不特定的IPython,并将与SSH会话或从终端窗口中运行其他任务。
如果您使用bpython,所有的命令历史记录是默认保存到~/.pythonhist
。
要保存命令后回用,你可以将它们复制到Python脚本文件:
$ cp ~/.pythonhist mycommands.py
然后编辑该文件来清理和put it under Python path(全局或虚拟环境的site-packages,当前目录中,* .pth提,或其他方式)。
要包含的命令到你的壳,只是从已保存的文件中导入:
>>> from mycommands import *
http://www.andrewhjon.es/save-interactive-python-session-history
import readline
readline.write_history_file('/home/ahj/history')
有一个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
然后将环境变量PYTHONSTARTUP
在壳(例如,在~/.bashrc
):
export PYTHONSTARTUP=$HOME/.pystartup
您还可以添加这提供自动免费:
readline.parse_and_bind('tab: complete')
请注意,这只会在* nix系统上运行。由于readline的是只在Unix平台上可用。
安装Ipython,并通过运行命令打开一个IPython的会议后:
ipython
从你的命令行,只需运行以下IPython的“魔力”命令来自动记录您的整个IPython的会议:
%logstart
这将创建一个唯一命名的.py文件和存储您的会话作为交互的IPython会话或在您选择的脚本(S)使用以后使用。
此外,reinteract给你一个笔记本一样的接口为Python会话。
除了IPython中,类似的实用程序bpython有一个“保存您输入到一个文件中的代码”功能
我不得不努力寻找答案,我是很新的IPython的环境。
这将工作
如果您IPython的会议上看起来是这样的
In [1] : import numpy as np
....
In [135]: counter=collections.Counter(mapusercluster[3])
In [136]: counter
Out[136]: Counter({2: 700, 0: 351, 1: 233})
要保存,然后在同一会话的IPython使用该命令行模式从1至135
In [137]: %save test.py 1-135
这将节省在test.py文件所有的Python语句在当前目录(你启动的IPython的)。
有历史%的魔法打印和保存输入历史(任选与输出)。
要在当前会话保存到一个文件名为my_history.py
:
>>> %hist -f my_history.py
历史IPython中同时存储输入的命令,它产生的结果。您可以轻松地去通过与上调以前的命令和向下箭头键,或访问你的历史在更复杂的方式。
您可以使用历史%的神奇功能检查过去的输入和输出。历届会议输入历史记录将保存在数据库中,和IPython都可以配置为保存输出历史。
其他几个魔术函数可以使用您的输入历史,包括编辑%,再跑%,%的召回,%宏,%保存并%引擎收录。您可以使用标准格式来指代线:
%pastebin 3 18-20 ~1/1-5
这将需要线3,并从当前会话线18至20,并且线1-5从以前的会话。
请参见%的历史?对于文档字符串和更多的例子。
此外,一定要探索%store magic的能力,为在IPython的变量轻量级的持久化。
存储变量,别名和宏在IPython中的数据库。
d = {'a': 1, 'b': 2}
%store d # stores the variable
del d
%store -r d # Refresh the variable from IPython's database.
>>> d
{'a': 1, 'b': 2}
为了autorestore上启动存储变量,specifyc.StoreMagic.autorestore = True
在ipython_config.py。