私はJupyterノートブックで実行しているPython(3.5.2)スクリプトからコマンドラインプログラムを実行するためにサブプロセスを使用しています。サブプロセスは実行に時間がかかりますので、Jupiterノートブックの画面にstdoutを表示させてください。JupiterノートブックのPythonサブプロセスからのライブstdout出力
これは、端末から実行される通常のPythonスクリプトでは問題ありません。私はこの使用してください:
def run_command(cmd):
from subprocess import Popen, PIPE
import shlex
with Popen(shlex.split(cmd), stdout=PIPE, bufsize=1, universal_newlines=True) as p:
for line in p.stdout:
print(line, end='')
exit_code = p.poll()
return exit_code
をしかし、私はJupyterノートブックでスクリプトを実行すると、それが画面にライブ標準出力を印刷しません。代わりに、サブプロセスの実行が完了した後にすべてを出力します。
これを解決する方法はありますか?あなたは(これはデフォルトですので、あなたは完全にstdout
引数を省略することができます)stdout = None
を設定した場合
多くのおかげで、 ジョニー
あなたのプリントにflush = Trueを追加してみてください。 –
Thanks、Padraic。私はそれを試みたが、うまくいかなかった。私はまた、forループの前にsys.stdout.flush()を追加しようとしましたが、どちらもうまくいきませんでした。 –
Jupyterのどのシステムとバージョンでこれを実行していますか? UbuntuとPython 3の下で、jupyter_client 4.3.0、jupyter_console 5.0.0、jupyter_core 4.1.0でコードを実行し、プロセスが生成している間にstdoutが徐々に印刷されました。 – foglerit