目的・背景
AtCoderでは提出する前に「コードテスト」をすることができます。
コードテストでは、実行中にエラーが起きないかや出力例と一致するかを確かめるのに便利な一方、以下の点で不満がありました。
- ブレークポイントをおいてデバッグできない
- タイポを指摘してくれない
- カラーが無くて見にくい
→ 基本コードテストで実行して、「あれ、なんでエラーになるんだろ」ってなったタイミングでさっとコピペしてデバッグできるようにしたい&複雑な環境構築はしたくない!
ざっと概要
以下のような構成にしました。
.
└── atCoder/
├── .vscode/
│ └── launch.json (後ほど作成)
└── input.txt(入力例をコピペする用)
└── main.py(コードテストをコピペする用)
└── setup.py(入力をinput.txtから読み込むようにする)
- setup.py
入力を受け取る時に使用する、input()で、テキストから読み取るように設定し、main.pyを実行するようにします。(コードテスト&デバッグをする際はこちらを実行) - input.txt
「入力例」をコピペします - main.py
コードテストで作成した自分のコードを貼り付けます - .vscode/launch.json
デバッグ時の実行ファイルをsetup.pyにする(必須ではない)
やること
1. 通常実行
以下をsetup.pyに貼り付ければ完了です。
setup.py
import subprocess
with open("input.txt", "r") as file:
subprocess.run(["python3", "main.py"], stdin=file)
あとはinput.txtに入力例を貼り付け&main.pyに自分のコードを貼り付けて実行!(setup.pyの方を実行)
python3 setup.py
2. デバッグ時の注意
VSCodeで debuggerを使用する際、デフォルトではアクティブになっているファイルが実行されます。
編集するファイルはmain.pyなのに対して、実行して欲しいファイルはsetup.pyなので、debuggerを使用する際には毎回setup.pyをアクティブにしてから実行する必要があり面倒です。
launch.jsonを編集
プロジェクトフォルダに.vscode/launch.jsonを作成し以下のようにしました。
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Python Debugger: debug setup",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/setup.py",
"console": "integratedTerminal"
}
]
}
↑ デフォルトでsetup.pyを実行してくれます。
使ってみた感想
色がついて見やすくなり、バグを見つけるのも早くできるようになりました。「コードテスト」と同じくらいの手間で使用できるので、もうコードテストを使うことはないかも。