如何记录IPython的输出,而不是在每次加载时都使用丑陋的7行logging-info?

时间:2013-06-27 11:33:37

标签: python logging installation ipython dotfiles

我的目标是调用ipython,同时将所有输入/输出记录到IPython,并看到如下内容:

stu@stumac ~  $ ipython

In [1]: exit
stu@stumac ~  $

如果我设置

,可以轻松删除横幅

c.TerminalIPythonApp.display_banner = False

在我的 ~/.ipython/profile-default/ipython_config.py档案。

但是如何在记录事情的同时清理创业公司?

在全新安装中,如果我在没有参数的情况下启动IPython,我会看到:

sente@og ~ $ ipython
Python 2.7.3 (default, Jun 20 2013, 12:50:58)
Type "copyright", "credits" or "license" for more information.

IPython 0.13.2 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: exit
sente@og ~ $

如果我在调用IPython时传递logfile=logfile.txt参数,我会看到:

sente@og ~ $ ipython --logfile=logfile.txt
Activating auto-logging. Current session state plus future input saved.
Filename       : logfile.txt
Mode           : backup
Output logging : False
Raw input log  : False
Timestamping   : False
State          : active
Python 2.7.3 (default, Jun 20 2013, 12:50:58)
Type "copyright", "credits" or "license" for more information.

IPython 0.13.2 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: exit
sente@og ~ $

如何在不向终端添加额外混乱的情况下使用日志记录:

Activating auto-logging. Current session state plus future input saved.
Filename       : logfile.txt
Mode           : backup
Output logging : False
Raw input log  : False
Timestamping   : False
State          : active

在其他机器上,我已将IPython配置为通过包含行.ipython/profile_default/startup/01-log-everything.py来自动记录事物:

from time import strftime
import os.path

ip = get_ipython()

ldir = ip.profile_dir.log_dir
fname = strftime('%Y-%m-%d-%H-%M-%S') + ".py"
filename = os.path.join(ldir, fname)

ip.run_line_magic('logstart', '-o %s append' % filename)

导致与添加--logfile=logfile.txt

时相同的混乱

任何有关如何正确执行此操作的帮助将不胜感激。我可以,如果没有别的重定向sys.stdout,配置日志,然后重置sys.stdout,但我希望有一个不那么hackish解决方案。

2 个答案:

答案 0 :(得分:4)

要使用没有横幅的日志,请使用--no-banner标志。

ipython --no-banner --logfile='logfile.txt'

可以在使用--help-all标志显示的帮助文件中找到。

ipython --help-all

答案 1 :(得分:4)

查看IPython源代码后,即:

这似乎是真正实现我想要的唯一方法 - 完成日志记录没有在启动时回显的任何东西 - 是重定向或静音{{1}初始化日志时。

我创建了一个启动文件:~/.ipython/profile_default/startup/01-log-everything.py执行此操作,代码为:

sys.stdout