デバッグモードでPyCharm IDE(3.1)でキーボード割り込みイベントを送信する方法はありますか?
残念ながら、これを行う簡単な方法はありません。 psutil
およびsignal
モジュールを使用する必要があります。これを機能させるには、psutil
をインストールする必要があります。これを行うには、pip
を使用するのが最善の方法です。
_pip install psutil
_
それでは、ここに展示Aがあるとします。
_while True:
try:
time.sleep(3)
print "Zzzz"
time.sleep(3)
print("gong!")
except KeyboardInterrupt as e:
print "Closed by an Interrupt"
break
_
そして、あなたはこれをPyCharmで実行しています。使用しているインタープリターにpsutils
がインストールされていることを確認してください。確認してもいい:
インタプリタが正しく設定されていることを確認してください:
psutil
をインストールしていない場合は、いつでもインストールできます Install ボタン。
では、すべての設定が完了したので、プログラムをデバッグしましょう。
ここで必要なのは、プロセスIDを取得することだけです。これは、プログラムの開始時に取得できます。
それでは、コンソールを起動してシグナルを送信しましょう。
そして、それが適切に機能した場合は、whileループが終了することがわかります。
コンソールの開始スクリプトに割り込みを送信する関数を追加することで、プロセスをさらに効率化できます。
すべての処理が完了したら、interrupt(<pid here>)
を呼び出して、プロセスのキーボード割り込みを呼び出すだけです。
それがあなたの質問に答えることを願っています。
これはPyCharmのバグです。参照: http://youtrack.jetbrains.com/issue/PY-484
キーボード割り込みはSIGINTです。 UNIXシステムでは、コマンドラインに移動して次のいずれかを実行できます。
$ kill -INT <pid>
またはPythonで:
import os, signal
os.kill(<pid>,signal.SIGINT)
このコメントで述べたように- なぜこれができないのですかpythonキーボード割り込みが機能しますか?(pycharm内) :
PyCharmの最近のバージョンでは、
Emulate terminal in output console
実行構成-これにより、 Ctrl + C 実行コンソールでキーボード割り込みを送信します。
PyCharm 2018.3(コミュニティ版)でテスト済み:
また、これは tqdm ライブラリを壊します:
この問題についてPycharmのバグ追跡を検索しているときに、このメッセージが表示されました: https://youtrack.jetbrains.com/issue/PY-484
バージョンPycharm 3を使用している場合、これは役立つかもしれませんが、私にとってはうまくいきました。
トラッカーのコメントの1つ:「実際にCtrl + Cを実行するとスクリプトの実行が最終的に停止することがわかりましたが、実行中にコンソールに文字を最初に書き込む必要があります。コンソールウィンドウをクリックして、任意のキーを押し、Ctrl-Cを押します。言い換えれば、GUIフレームがフォーカスを取得する問題のように見えます。