[英]Induce IPython notebook output cell programmatically from a different source file
[英]Programmatically get current IPython notebook cell output?
我有一個在 IPython 筆記本(輸入單元 X)中運行的導入函數,它產生一個輸出(在輸出單元 X 中)。 函數運行后,我還有一些代碼(也在輸入單元格 X 中); 該代碼有什么方法可以檢索當前輸出(在輸出單元格 X 中)?
可能還有其他方法可以完成我想要實現的目標; 但我很好奇上述是否可行。
IPython 的輸出緩存系統定義了幾個全局變量:
_
](單個下划線):存儲以前的輸出,就像 Python 的默認解釋器。__
](兩個下划線):下一個上一個。___
](三個下划線):下一個下一個上一個。 此外,在創建每個輸出x
會創建一個變量_<x>
並將輸出作為其值。 例如:
In [12]: lst = [i for i in range(11)]
In [13]: lst
Out[13]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
In [14]: _13
Out[14]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
此外,如果您有興趣, _i<x>
包含輸入單元格x
的內容:
In [15]: _i12
Out[15]: 'lst = [i for i in range(11)]'
您可以使用_
或Out[X]
獲取單元格 X 的Out[X]
。 如:
In [1]: 2 + 35
Out[1]: 37
In [2]: _ + 3
Out[2]: 40
In [3]: lst = [i for i in range(5)]
lst
Out[3]: [0, 1, 2, 3, 4]
In [4]: Out[1] #Using the output of Cell 1
Out[4]: 37
In [5]: Out[3][1] #Using the output of Cell 3
Out[5]: 1
在這里,如果你想獲得前一個單元格的輸出,那么你可以使用_
。 您也可以使用兩個 ( __
) 或三個下划線 ( ___
) 來分別引用下一個和下一個前一個單元格的輸出。
但是,如果筆記本中有許多單元格並且您想引用某個特定的單元格,那么Out[X]
會有所幫助。
當單元格調用生成其自己的stdout
的函數時,現有答案不起作用。
我找到了一個不同的解決方案,它可以捕獲前一個單元格的所有輸出,無論它是如何生成的。
# cell 1:
%%capture output
print("blah")
func_that_prints("Bha")
# -----------------
# cell 2:
prev_cell_output = str(output)
# do something with prev_cell_output
請注意, %%capture
行必須是單元格的第一行才能使其工作。 output
可以重命名為任何其他變量名。 顯示的第一個單元格將沒有輸出(因為它將被捕獲)。
output
僅在以下單元格中可用。 它是一個utils.io.CapturedIO
對象,因此您可以對其進行字符串化,或者甚至對其調用.show()
,這將顯示其內容。
有關更多信息,例如僅捕獲stdout
或僅捕獲stderr
使用參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.