現象
mac OSで、Visual Studio Code で、次のコードを実行すると、クラッシュする。
import cv2
cap = cv2.VideoCapture(0) # ここで、Pythonがクラッシュする。
…
環境
Mac OS: Catalina 10.15.6
Visual Studio Code: 1.48.2
Python 3.8.4
原因
クラッシュレポートを見ると、次のようになっていて、
Crashed Thread: 1 Dispatch queue: com.apple.root.default-qos
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
…
Thread 1 Crashed:: Dispatch queue: com.apple.root.default-qos
…
0x00007fff71fb4411 abort_with_payload + 9 3 com.apple.TCC 0x00007fff6868559f __CRASHING_DUE_TO_PRIVACY_VIOLATION + 163
4 com.apple.TCC 0x00007fff68683531 __TCCAccessRequest_block_invoke.114 + 500
…
CRASHING_DUE_TO_PRIVACY_VIOLATION
macOS 10.15 Catalinaでは「User Consent」がさらに強化され、アプリがスクリーンキャプチャの撮影や書類、ダウンロードフォルダへのアクセスする際にユーザーの承認が必要に。
Visual Studio Code が Python を実行する段階で、Permission を取得していないのが原因と思われる。
Workaround
調べた限りでは、解決策は見つからず、次のワークアラウンドしかない。
方法1
コマンドラインから、sudo で Visual Studio Codeを起動する。
$ sudo /Applications/Visual\ Studio\ Code.app/Contents/MacOS/Electron
方法2
sudo /bin/bash でターミナルを起動し、Python を起動し、直接 実行する。