web-dev-qa-db-ja.com

終了Pythonデバッガーipdb

私はipdbをかなり頻繁に使用して、isolatedであるコードにジャンプします。つまり、それを使用する実際のスクリプトを書くのは困難です。代わりに、モックを使用して最小限のテストケースを作成し、それにジャンプします。

ワークフローの例:

def func():
   ...
   import ipdb
   ipdb.set_trace()
   ...

def test_case():
    ...
    func()
    ...

次に、呼び出す

py.test test_file.py -s -k test_case

今、私は通常、1つまたは2つの変数をチェックしてから終了したいです。コードを変更して、もう一度やり直してください。

終了するにはどうすればよいですか?マニュアルには、qがデバッガを終了すると書かれています。そうではありません(本当に)。デバッガーが実際に終了する前に、数回終了する必要があります。 Ctrl-CとCtrl-Dについても同じ動作です(さらに、Ctrl-Dを数回押すと最終的に端末が終了するというフラストレーションもあります)。

強制終了するスマートな方法はありますか?このワークフローは賢明なものですか?それを行う標準的な方法は何ですか?

33
Joachim

私は.pdbrc

import os

alias kk os.system('kill -9 %d' % os.getpid())

kkは、デバッガーと(デバッガーをトリガーするプロセス)を強制終了します。

40
Joachim

次は私のために働いた:

import sys
sys.exit()

上記および下記で述べたように、ipythonの新しいバージョンでは、これは機能しません。その場合、

import os
os._exit(0)

それでもトリックを行う必要があります。

42
KDN

別の回答で述べたように、これはIPython 5.1のバグでした。 このプルリクエスト で修正され、IPython 5.2以降の問題ではなくなりました。 qquit()、または Ctrl+d デバッガーを終了します。

7
joelostblom

これは、IPython 5.1.0の最新バージョンの問題です。次のコードを使用して、環境を確認できます。

pip freeze | egrep -i '^i'

IPython == 5.0.0にダウングレードすることで解決します。

pip install ipython==5.0.0

それは私のために働く。

7
Scofield77