簡體   English   中英

以編程方式獲取當前的 IPython 筆記本單元輸出?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM