2009-09-08 5 views
85

Pythonスクリプトを実行時の任意の時点で強制的に強制的にREPLにドロップする方法はありますかコマンドライン?PythonコードからREPL(Read、Eval、Print、Loop)をドロップする方法

私は、標準入力またはファイルからデータを読み込み、プロットして、REPLにドロップして、プロットをカスタマイズできるようにする、素早く汚いプロットプログラムを書いています。

答えて

78

あなたはPythonのためのインタラクティブなオプションを使用して試みることができる:

python -i program.py 

これは、REPLに行き、その後、program.pyでコードを実行します。 program.pyのトップレベルで定義またはインポートするものはすべて利用可能です。あなたはあなたがのほかに、PDBと同じようにそれを使用することができますipdb

を使用する必要がありますiPythonの使用やデバッガの機能を取得するには

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

暗いところに切り替える準備ができたら、ipython -i program.pyがそこにあります。 – joeforker

+0

印象的でシンプルです。 – Nishant

+0

あなたはちょうど私の心を吹いた。 – Bemmu

16

あなたがデバッガを起動することができます。

import pdb;pdb.set_trace() 

ないあなたがのためのREPLをしたいが、デバッガは非常に似ているものを確認してください。ここで

+3

私は彼がLispの実行中のプロセスに実際の変更を加えたいと思うでしょう。 – Pinochle

+1

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

+0

私はPythonのVIM instaedにコードスニペットを書いてそれを保存し、!python -i%を実行する傾向があります。またはpdb。それは良いユースケースです。 – Nishant

38

は、あなたがそれ(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 

あなたはIPython、PythonのREPLsのキャデラックを使用する必要があります。ドキュメントからhttp://ipython.org/ipython-doc/stable/interactive/reference.html#embedding-ipython

を参照してください:

また、データを見て停止し、いくつかの自動、 計算集約一部と を行う必要があるために 一般的である科学的 コンピューティングの状況で役立ちますプロットなど IPythonインスタンスを開くと、データと 関数へのフルアクセスが になり、 インタラクティブパート(perha)を実行するとプログラム の実行を再開できます後で をもう一度、必要に応じて何度も停止させるps)。

+3

IPythonは素晴らしいですが、OPが組み込みのPythonだけを使用するソリューションを望んでいる場合、Jasonのcode.InteractiveConsole()ソリューションは、どのように「行うべきか」の方法です。 :-) –

102

私は頻繁にこれを使用します:私はちょうど私の自身のスクリプトのいずれかでこれをやった

import ipdb 
ipdb.set_trace() 
+6

"code"モジュールのドキュメントは、次のURLにあります。http://docs.python.org/library/code.html –

+36

これより簡単なこともできます。 code.interact(local = locals()) –

+1

'pdb'の中で' interact'を使うことができます。 – gerrit

0

(それが楽器に巨大な面倒くさされ自動化フレームワーク内で実行されます):

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インタプリタと同じ構文を使用して状態をチェックできます(ただし、モジュールの読み込みはできません)。 あまりエレガントではありませんが、他の設定は必要ありません。

関連する問題