17

MATLAB のような機能を取り戻すための簡単な方法をあらゆる場所で探してみました。スクリプトを実行するときに、関数の名前空間を ipython に維持してもらいたいのです。

メイン関数があり、sim_loop()デバッグしようとしているコードを含む関数があります。sim_loop()スクリプトの実行後に表示できるようにしたい大きな配列があります。その機能を動作させることができません (「インタラクティブな名前空間」だと思います)。

仕事をしなければなりませんがpdb、終了しpdbて変数をチェックしたい場合は、もう一度実行する必要があります (言うまでもなく、オートコンプリートやその他の機能はありません)。スクリプトに IPython シェルを埋め込みましたが、スクリプトを何度もシームレスに実行し、2 番目の関数 (ではないmain()) 内の変数を常にチェックしたいため、これでも問題は解決しません。

明確にするために、スクリプトがipython 内から 実行された後、スクリプトのサブルーチンのスコープにアクセスできるようにしたいと考えています。

ie: ipython を起動します。次に、「run script.py」と入力します。それは実行され、完全に正常に動作します。次に、スコープ内にある変数「ダミー」を検査できるようにしたい: main->sim_loop->dummy

私はそれを調べてから、「run script.py」でスクリプトを再度実行し、「ダミー」をもう一度チェックして、うんざりさせたいと思っています。

4

2 に答える 2

29

メインのipython名前空間でスクリプトを実行するには:

ipython script.py

もちろん、これは実行されて終了します。メインのipython名前空間でスクリプトを実行してからREPLにドロップする場合:

ipython -i script.py

すでにipython内にいて、既存のメインipython名前空間でスクリプトを実行する場合:

%run -i script.py

他のパラメータを追加する必要がある場合があります。たとえば、スクリプトが明示的にsys.exitどこかを呼び出す場合は、おそらく-eパラメータが必要です。

「アクティブな」コードを実行せずにすべての名前を名前空間にインポートするだけの%run -n -i script.py場合は、スクリプトがif __name__ == '__main__'テストを実行する場合に実行できます。

もちろん、ipythonがなくても、execfile('script.py')探しているのとほぼ同じ効果で、ローカルとの奇妙な相互作用を除いて、3.xでは機能しません。または、from script import *十分に近い場合もあります。

于 2012-11-09T01:20:22.697 に答える
2

あなたが望んでいると思われるのは、開発目的のスコープを破り、ローカルをグローバルにすることです。これは最善のアイデアではないかもしれません。

可能な代替案として、ipdbについて知っていますか?

于 2012-11-09T00:38:04.230 に答える