vscode: Terminal on Windows uses `cmd /C`, this corrupts passed arguments

Environment data

  • VS Code version: 1.62.2
  • Extension version: v2021.12.1559732655
  • OS and version: Windows 8.1
  • Python version: Python 3.6

Steps to reproduce:

Using the following Python script (try-argparse.py)

import sys
print(f'sys.argv: {sys.argv}')

with this launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: Current File with arguments",
      "type": "python",
      "request": "launch",
      "program": "${file}",
      "args": [
        "-f",
        "\"AMOUNT>=0,06\""
      ]
    }
}

Because I have a > in the argument I have to put the argument in double quotes.

Executing the config results in the following command in the terminal:

c: && cd c:\test && cmd /C "c:\Python36\python.exe c:\Users\XXXX\.vscode\extensions\ms-python.python-2021.12.1559732655\pythonFiles\lib\python\debugpy\launcher 60722 -- c:\test\try-argparse.py -f """AMOUNT>=0,06""" "

The output in the terminal:

sys.argv: ['c:\\test\\try-argparse.py', '-f', '"AMOUNT,06"']

The > is gone (cmd removes it), and I get extra " characters.


If I start the debugger with the following command (no cmd /C "..."):

c: && cd c:\test && c:\Python36\python.exe c:\Users\XXXX\.vscode\extensions\ms-python.python-2021.12.1559732655\pythonFiles\lib\python\debugpy --listen 60722 c:\test\try-argparse.py -f "AMOUNT>=0,06"

I can add the argument --wait-for-client if I want to attach to the debugger with VSC.

I get in the terminal

sys.argv: ['c:\\test\\try-argparse.py', '-f', 'AMOUNT>=0,06']

The correct argument as set in the launch config.

What is the reason to use cmd /C "debug launch command"? And in this process the " in the argument gets transformed to """

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 25 (12 by maintainers)

Commits related to this issue

Most upvoted comments

@roblourens

It is for bash but the first user with a problem passing regex arguments.

Why is the | character not part of the to-be-quoted characters for bash.

btw. Only \ and ] need to be escaped inside a [] construct in a regex. Technically ] not if it is the first character or the first after ^ if it is a [^] construct.