web-dev-qa-db-ja.com

プログラムで現在のIpythonノートブックのセル出力を取得しますか?

(出力セルXで)出力を生成するIPythonノートブック(入力セルX)で実行されるインポートされた関数があります。関数の実行後、さらにコードが入力されます(これも入力セルXにあります)。そのコードが現在の出力(出力セルX)を取得する方法はありますか?

私が達成しようとしていることを実行する他の方法があるかもしれません。しかし、上記が可能かどうか私は知りたいです。

ありがとう!

18
killajoule

IPythonの 出力キャッシュシステム は、いくつかのグローバル変数を定義します。

  • [_](単一の下線):Pythonのデフォルトインタープリターのように、以前の出力を保存します。
  • [__](2つのアンダースコア):次の前。
  • [___](3つのアンダースコア):次の次の前。

さらに、各出力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)]'
30
MattDMo

セル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

ここで、前のセルの出力を取得したい場合は、_を使用できます。 2つ(__)または3つのアンダースコア(___)を使用して、次の前のセルと次の次の前のセルの出力をそれぞれ参照することもできます。

ただし、ノートブックに多数のセルがあり、特定のセルを参照したい場合は、Out[X]が役立ちます。

8
Jay Patel

セルが独自の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だけをキャプチャするには、 参照 を使用します。

2
stason