web-dev-qa-db-ja.com

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

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

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

99
dsimcha

Pythonの対話型オプションを使用してみてください。

python -i program.py

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

95
Alex

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

def interact():
    import code
    code.InteractiveConsole(locals=globals()).interact()
117
Jason R. Coombs

方法は次のとおりです(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 REPLsのキャデラックであるIPythonを使用する必要があります。 http://ipython.org/ipython-doc/stable/interactive/reference.html#embedding-ipython を参照してください。 =

ドキュメントから:

また、自動で計算集約的な部分を実行し、データ、プロットなどの表示を停止する必要があることが一般的な科学計算の状況でも役立ちます。IPythonインスタンスを開くと、データと関数に完全にアクセスできるようになります。また、インタラクティブな部分の処理が完了したら、プログラムの実行を再開できます(おそらく、必要に応じて何度でも後で停止できます)。

42
joeforker

IPythonとデバッガーの機能を使用するには、 ipdb を使用する必要があります。

次を追加して、pdbと同じ方法で使用できます。

import ipdb
ipdb.set_trace()
17
bluszcz

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

import pdb;pdb.set_trace() 

REPLの目的は不明ですが、デバッガは非常に似ています。

17
Ned Batchelder

私は自分のスクリプトの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インタープリターと同じ構文を使用して状態を確認できます(ただし、モジュールのインポートは許可されていないようです)。エレガントですが、他の設定は必要ありません。

0
razorboy