2013-07-28 147 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