2013-07-28 39 views
65

有谁知道是否可以从命令行以非交互方式运行IPython/Jupyter笔记本,并将生成的.ipynb文件与运行结果一起保存。如果还不可能,用phantomJS来实现有多难?有些东西可以打开和关闭内核,还有一些可以打开和关闭Web服务器?非交互式运行IPython/JUpyter笔记本

更具体,让我们假设我已经有一个笔记本original.ipynb,我想重新运行该笔记本的所有单元格,并将结果保存在一个新的笔记本new.ipynb,但在命令行上一个命令做到这一点,而不需要在浏览器中进行交互或关闭内核或Web服务器,并假定没有内核或Web服务器已在运行。

例如命令:

$ ipython notebook run original.ipynb --output=new.ipynb

回答

55

是的,它是可能的,也很容易,它将(大部分)在2.0的IPython核心,我建议现在看看those examples

[编辑]

现在是Jupyter NbConvert。 NbConvert附带有一组默认禁用的Preprocessor,其中两个(ClearOutputPreprocessorExecutePreprocessor)有兴趣。你可以通过c.<PreprocessorName>.enabled=True(大写字母是python)在你的(本地|全局)配置文件中启用它们,或者在命令行上使用--ExecutePreprocessor.enabled=True来保留命令的其余部分。

--ExecutePreprocessor.enabled=True有方便的--execute别名,可以在最近版本的NbConvert上使用。它可以与--inplace如果需要

例如被合并,转换为HTML运行笔记本无头后:剥离输出

$ ipython nbconvert --to=pdf --ClearOutputPreprocessor.enabled=True RunMe.ipynb

这之后

$ jupyter nbconvert --to=html --execute RunMe.ipynb

转换为PDF(当然)通过产生一个<insert-your-language-here>内核,如果你设置了--profile=<your fav profile>,它可以和非python内核一起工作。由于需要重新运行笔记本,转换可能会很长。您可以使用--to=notebook选项执行笔记本到笔记本转换。

根据使用情况,可能需要设置/取消设置各种其他选项(超时,允许错误...)。有关信息,请参阅文档,当然还有jupyter nbconert --help--help-all

+1

谢谢你指点我正确的方向。由于确切的代码不贴了,我分叉要旨之一,并增加输出的代码,这样下将运行在命令行笔记本就像一个期望的'''$ ipnbdocttest.py original.ipynb new.ipynb''' https://gist.github.com/davidshinn/6110231 – davidshinn

+0

太棒了!这个功能将会在nbconvert 2.0中添加一个更好的API,不要犹豫,编辑wiki来添加一个链接到你的脚本。 – Matt

+1

@Matt这是否成为ipython 2?如果是这样,我该如何使用它? –

-5

您可以运行通过命令行IPython的,笔记本电脑,服务器:

ipython notebook --pylab inline 

这将开始在非交互模式下,所有输出服务器打印在代码下面。然后,您可以保存包含代码&输出的.ipynb文件。

+0

感谢您的答复,但我一直在寻找一个更具体该解决方案不需要在Web浏览器中进行干预,也不需要关闭内核和Web服务器。我编辑了更具体的问题。 – davidshinn

+0

在这种情况下,我不知道如何继续。你打算定期这样做吗? iPython-Notebook旨在在浏览器中交互使用,并保存特定的ipynb-从命令行获得的文件对我来说似乎相当古怪。 – ala

+0

是的,我计划经常这样做,如果有的话。在数据源经常变化的情况下,这将非常有用,我希望看到使用大熊猫的诊断输出与它生成的代码交错,这正是ipython笔记本所做的很好。但是,如果我有许多这些类型的进程需要运行一天,那么它们会更好,如果它们可以批处理运行,那么稍后可以查看输出,就好像生成日志文件一样。标准日志记录的问题在于很难看到代码和输出彼此交错。 – davidshinn

20

在这个功能成为核心的一部分之前,我把一个小小的命令行应用程序放在一起,它可以完成你想要的功能。它叫做runipy,你可以用pip install runipy来安装它。 source and readme are on github

+0

runipy的伟大工程! – j08lue

+0

runipy似乎并没有为我工作这么好:它不更新'signature'场,并因此(当然,我认为这是一个结果),没有我的SVG的实际呈现:IPython的偏好显示原来的'__repr__'文本呈现。 – akim

+0

或'''conda安装runipy'''如果使用anaconda。 – Sean