Reading input during debugging in Python with VSCode
The trick to getting this to work is on the extension's(Don Jayamanne's Python) wiki page. You have to include "externalConsole": true
setting in your launch.json
file's "name": "Python"
section.
The extension's wiki confirms that this does not work by default:
This allows for capturing of input from the console/terminal window applications, which isn't possible in the standard VSCode debugger.
Here are the steps to getting this to work:
- From the Debug window (Ctrl+Shift+D), press the little gear icon to open (or to generate) a launch.json file. It gets placed into a
.vscode
directory in what ever folder you have selected as your "Open Folder" in VS Code. - You have to add
pythonPath
parameter to the first configuration block. This is needed to have the debugger work at all. - You also have to add and
externalConsole
parameter to the same block. This is what is needed to have the debugger accept input. When you debug, a separate window will open outside of VS Code but works well otherwise. After you add both settings, the block should look something like this. I did not have to change anything else in the rest of the launch.json file.
{ "name": "Python", "type": "python", "request": "launch", "stopOnEntry": true, "program": "${file}", "pythonPath": "C:/Users/igor/Documents/Tools/WinPython-32bit-3.4.3.7Slim/python-3.4.3/python.exe", "externalConsole": true, "debugOptions": [ "WaitOnAbnormalExit", "WaitOnNormalExit", "RedirectOutput" ] },
The externalconsole
directive is deprecated. Use console
instead and indicate your preference for external this way:
"console": "externalTerminal"
The application output (and input) will go to a separate window so the VS Code debug console remains a pure python prompt where you can evaluate stuff during breakpoints.