2016-12-20 3 views
1

デバッグしたいデータ処理パイプラインの設定があります。 パイプラインは、Pythonスクリプトを呼び出すbashスクリプトで構成されています。bashファイルからスクリプトを呼び出すと、iPythonのembed()が自動的に終了します

私は通常、デバッグにiPythonのembed()関数を使用します。しかし、bashファイルからpythonスクリプトを呼び出すと、embed()関数が呼び出されますが、私が干渉することなくすぐに終了します。同じPythonプログラムをコマンドラインから直接実行すると、私はこの種の動作を観察しません。これは意図した動作ですか、何か間違っていますか?

Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
Type "copyright", "credits" or "license" for more information. 

IPython 2.4.1 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object', use 'object??' for extra details. 

In [1]: 
Do you really want to exit ([y]/n)? 
'follow up code prints here' 
+0

関連するコードをBashスクリプトとPythonスクリプトから投稿してください。私は 'embed()'を呼び出すPythonスクリプトを実行するbashスクリプトを作成することでこれを再現することができませんでした。 – elethan

答えて

0

動作を確認するためにいくつかの実験を行いました。先祖のプロセスのいずれかが端末である場合、IPythonがコンソールを表示していることに気付きました。続き

/tmpディレクトリ内のファイルです: x.py

import IPython 
IPython.embed() 

call.sh

/usr/bin/python /tmp/x.py 

call2.sh

/tmp/call.sh 

実験1 python x.pyを実行すると、IPythonシェルが開き、待機します。

実験2 bash call.shを実行すると、IPythonシェルが開き、待機します。

実験3 実行中bash call2.shは、IPythonシェルを開き、待機します。

ご覧のとおり、IPython.embedコールの深さは関係ありません。常に対話型コンソールを起動して待機します。


新しいプロセスをフォークするときにも動作するようにしてください。

fork.shこの場合

/usr/bin/python /tmp/x.py & 

実験4 、IPythonシェルが始まったが、すぐに終了しました。最後に&に注目してください。それは別のプロセスを開始します。この場合、IPythonは端末にアクセスできなかったため、正常に終了しました。

関連する問題