質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

4171閲覧

VSCodeでPythonのデバッグが自動で終了してしまう

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/08/24 04:28

編集2021/08/24 04:53

前提・実現したいこと

VSCodeでPythonを書いています。デバッグの際に途中で動作が中断されるようなので、どうにかしてデバッグを中断させないようにしたいです。

発生している問題・エラーメッセージ

下のソースコードを見て頂ければわかると思いますが、本来はクリックを行って離すまではマウスの位置を追跡し続けるのですが、VSCodeでデバッグを行うとreturn Falseを行うまえに自動で終了してしまいます。

該当のソースコード

from pynput import mouse def move(x, y): print('マウスポインターは {0} へ移動しました'.format((x, y))) def click(x, y, button, pressed): print('{2} が {0} された座標: {1}'.format( 'Pressed' if pressed else 'Released',(x, y), button)) if not pressed: # クリックを離したら return False # Listenerを止める mouse_listener = mouse.Listener(on_move=move,on_click=click,) mouse_listener.start()

試したこと

設定の中にあるAutorun:delayの時間を変更しましたが、特に変化はありませんでした。

補足情報(FW/ツールのバージョンなど)

使用している拡張機能:Python,Pylance,Jupyter
VScodeのバージョン:1.59.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

VScodeでデバッグしている途中で動作が中断するのではなく、プログラムが終了しているのではないでしょうか。VScodeで「ターミナルで Python ファイルを実行」しても、コマンドラインで実行しても、すぐに終了してしまいますね。
IDLEで実行するとPythonのプロセスが終了しないので、一見して正常に動作しているように見えますが、プログラムに問題あるように思います。このコードはどこかのサイトを参考に書いたものですか?

PyPI/pynput のサンプルを見ると、リスナーをstart()した後にjoin()が必要になるように思います。

python

1mouse_listener = mouse.Listener(on_move=move,on_click=click,) 2mouse_listener.start() 3mouse_listener.join()

とすると、当方の環境では正常動作しているようです。

こちらのサイト pynputでマウスのクリックイベントを取得して処理する も参考になると思います。

投稿2021/08/25 02:40

編集2021/08/25 02:42
Bull

総合スコア986

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/08/29 11:09

コメントが遅くなって申し訳ありません。ご指摘の通り、join()を加えると正常に動作しました。 上のコードについてはhttps://office54.net/python/RPA/python-rpa-pynputのサイトのコードの一部を参考にしました。 もしよろしければ、なぜIDLEではプロセスが終了せず、VScodeだと終了したのか教えていただけないでしょうか。
Bull

2021/08/29 12:15

move 関数や click 関数はコールバック関数ですが、普通の関数と同じように Python のプロセス (インタープリター) が終了すれば、無くなります。 VScode で実行している時は、"python プログラム名.py" などと起動しているはずですが、Python のプログラムが終了すれば、Python のプロセス (インタープリター) も終了します。 一方、IDLE で実行している場合はプログラムが終了しても、Python のプロセスは終了しないので、move 関数や click 関数はそのまま残っています。コールバック関数が残っているので、マウスのイベント処理は正常に機能します。
guest

0

インデントに全角の空白を使っています。

def move(x, y):    print('マウスポインターは {0} へ移動しました'.format((x, y)))

投稿2021/08/24 04:46

technocore

総合スコア7247

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

technocore

2021/08/24 06:01

質問者はこっそり修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問