PythonコードからREPL(読み取り、評価、印刷、ループ)にドロップする方法


108

スクリプトがコマンドラインから起動された場合でも、プログラムの実行の任意の時点でPythonスクリプトをREPLに強制的にドロップする方法はありますか?

私はstdinまたはファイルからデータを読み取り、それをプロットし、REPLにドロップしてプロットをカスタマイズできるようにしたい、すばやくダーティなプロットプログラムを書いています。

回答:


104

Pythonのインタラクティブオプションを使用してみてください。

python -i program.py

これにより、program.pyのコードが実行され、REPLに移動します。program.pyのトップレベルで定義またはインポートしたものはすべて利用可能になります。


21
ダークサイドに切り替える準備ができたら、ipython -i program.pyが用意されています。
joeforker 2009

印象的でシンプル。
Nishant 2014年

126

私はこれを頻繁に使用します:

def interact():
    import code
    code.InteractiveConsole(locals=globals()).interact()

47
それよりもさらに簡単に行うことができます。コードをインポートします。code.interact(local = locals())
Steven Kryskalla

3
内ではpdb、を使用できますinteract
gerrit 2014

43

これを行う方法を次に示します(IPython> v0.11)。

import IPython
IPython.embed()

IPython <= v0.11の場合:

from IPython.Shell import IPShellEmbed

ipshell = IPShellEmbed()

ipshell() # this call anywhere in your program will start IPython

Python REPLのキャデラックであるIPythonを使用する必要があります。見るhttp://ipython.org/ipython-doc/stable/interactive/reference.html#embedding-ipythonを

ドキュメントから:

また、自動で計算が集中する部分を実行してから、データやプロットなどを確認する必要があることがよくある科学計算の状況でも役立ちます。IPythonインスタンスを開くと、データや関数に完全にアクセスできます。インタラクティブ部分が終了したら、プログラムの実行を再開できます(おそらく、後で必要なだけ何度でも停止できます)。


3
IPythonは優れていますが、OPが組み込みのPythonのみを使用するソリューションを必要とする場合は、Jasonのcode.InteractiveConsole()ソリューションを使用することをお勧めします。:-)
ベン・

18

iPythonの使用やデバッガの機能を取得するには、使用すべきipdbを

pdbと同じように使用できますが、以下が追加されています。

import ipdb
ipdb.set_trace()

17

デバッガーを起動できます。

import pdb;pdb.set_trace() 

REPLの目的がわからない場合でも、デバッガーは非常に似ています。


3
Lispのように、彼が実行中のプロセスにライブの変更を加えたいのではないかと思います。
ピノクル2009

1
あなたをpdbに起動したスクリプトの実行を再開する方法はありますか?
Jeff Welling

1
私はVIMでコードスニペットを記述し、Pythonで保存してから、たとえば!python -i%を実行する傾向があります。またはpdb。それは良いユースケースです。
Nishant

0

私は自分のスクリプトの1つでこれを実行しました(これは、計測する巨大なPITAである自動化フレームワーク内で実行されます)。

x = 0 # exit loop counter
while x == 0:
    user_input = raw_input("Please enter a command, or press q to quit: ")
    if user_input[0] == "q":
        x = 1
    else:
        try:
            print eval(user_input)
        except:
            print "I can't do that, Dave."
            continue

ブレークポイントが必要な場所にこれを配置するだけで、Pythonインタープリターと同じ構文を使用して状態を確認できます(ただし、モジュールのインポートはできないようです)。あまりエレガントではありませんが、他の設定は必要ありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.