2017-09-06 22 views
0

JupyterノートブックをPythonインターフェイスとしてC++コードに使用しています。私はJupyterノートブックにC++出力(cout)が表示されない

$パイソンmycode.py

と同じPythonコードを起動すると、私はターミナルでC++コードのすべて「のstd :: coutの」ステートメントを見ることができますが、私はJupyterノートブックブロックのすべてを実行した場合「cout」は表示されません。

Jupyterノートブックで標準出力ストリームが見えるかどうか、どうすればわかりますか?

ありがとうございます!

+0

あなたが提供できます行動を複製できる基本的な例? JupyterノートブックでC++カーネルを使用していますか?問題の説明があまりにも曖昧です。 – AmeyaVS

+0

さまざまなライブラリ([this link](http://nest-simulator.org)参照)をインストールする必要があるため、動作を再現するのは簡単ではありません。 問題をより明確にするために:JupyterにはC++カーネルがありません。私は、すでにコンパイルされた実行可能ファイル(C++の実行可能ファイルのソースコード)とインターフェースするPythonコードしか実行しないからです。 これが少し問題を明確にすることを願っています。 – Alberto

+0

シナリオは非常に曖昧ですが、 "Python interface to C++ code"の意味を詳しく説明できますか?好きなサンプルコードを好んで投稿してもらえますか? – AmeyaVS

答えて

2

はい、これは既知の問題です。 Pythonを書くとき、ほとんどのオブジェクトはsys.stdout/sys.stderrオブジェクトを書き込み、傍受するフックを提供します。ほとんどのコンパイルライブラリは、sys.stdin/sys.stdoutに書き込もうとすると気にせず、ファイルディスクリプタを開いて書き込みます。これを傍受することはできません。たいていの場合、基礎となるライブラリでは修正できるものがありますが、多くの人がバグを報告するのは面倒です。

ノートブックを起動した端末でC++出力が表示されます。それを "修正"する方法についてのアイディアがありますが、それは自明ではありません。

注意、あなたが直接ファイル記述子1を書き込むことによって再現することができ、「何とか」は、ノートブックが開始された端末に表示されます。

import os 
os.write(1, 'blah\n'.encode()) 

マイターミナル:

[I 12:13:51.703 LabApp] Adapting to protocol v5.1 for kernel 5cf9f732-5a0e-417d-8b66-bc50d3cbbe80 
blah 
[I 12:15:51.633 LabApp] Saving file at /Untilted1.ipynb 
+0

説明をありがとう!私は尋ねる前にそれを探しましたが、答えは見つかりませんでした。 – Alberto

関連する問題