スクリプトがコマンドから起動された場合でも、プログラムの実行中の任意の時点でPythonスクリプトをREPLにドロップするように強制する方法はありますかライン?
私は迅速で汚いプロットプログラムを書いています、それはstdinまたはファイルからデータを読み取り、それをプロットし、プロットをカスタマイズできるようにREPLにドロップします。
Pythonの対話型オプションを使用してみてください。
python -i program.py
これにより、program.pyのコードが実行され、REPLに移動します。 program.pyのトップレベルで定義またはインポートするものはすべて使用可能になります。
私はこれを頻繁に使用します:
def interact():
import code
code.InteractiveConsole(locals=globals()).interact()
方法は次のとおりです(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インスタンスを開くと、データと関数に完全にアクセスできるようになります。また、インタラクティブな部分の処理が完了したら、プログラムの実行を再開できます(おそらく、必要に応じて何度でも後で停止できます)。
デバッガーを起動できます。
import pdb;pdb.set_trace()
REPLの目的は不明ですが、デバッガは非常に似ています。
私は自分のスクリプトの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インタープリターと同じ構文を使用して状態を確認できます(ただし、モジュールのインポートは許可されていないようです)。エレガントですが、他の設定は必要ありません。