Skip to content

Python scripts are executed with the wrong path separator in integrated Powershell on Windows #13811

Closed

Description

Environment data

  • VS Code version: 1.48.2
  • Extension version (available under the Extensions sidebar): 2020.08.106424
  • OS and version: Windows 10 , 1909, build 18363.1016
  • Python version (& distribution if applicable, e.g. Anaconda): Anaconda, 3.7.7
  • Type of virtual environment used (N/A | venv | virtualenv | conda | ...): conda
  • Relevant/affected Python packages and their versions: N/A
  • Relevant/affected Python-related VS Code extensions and their versions: N/A
  • Value of the python.languageServer setting: Jedi

Expected behaviour

On Windows, with Powershell as the embedded terminal, the path to the python executable and to the current script being executed should use backslashes.

Actual behaviour

A script command line like this is generated:

(py37) PS C:\Users\tsbertalan\SNIPPED> & C:/Users/tsbertalan/Anaconda3/envs/py37/python.exe "c:/Users/tsbertalan/SNIPPED/SCRIPT.py"

However, invoking workbench.action.debug.start instead generates:

(base) PS C:\Users\tsbertalan\SNIPPED>  & 'C:\Users\tsbertalan\Anaconda3\envs\py37\python.exe' 'c:\Users\tsbertalan\.vscode\extensions\ms-python.python-2020.8.106424\pythonFiles\lib\python\debugpy\launcher' '53300' '--' 'c:\Users\tsbertalan\SNIPPED\SCRIPT.py'

Which was very confusing at first--when I debugged the script, paths which were constructed using os.path.join with os.path.basename(__file__) had homogeneous, all-backslash paths, but when I ran it with python.execInTerminal, the paths were mixed!

Steps to reproduce:

  1. Use "Python: Select Interpreter" to launch a file dialog and locate python.exe in C:\Users\USERNAME\Anaconda3\envs\ENVNAME.
  2. Use python.execInTerminal (the little play button) to launch a script, with terminal.integrated.shell.windows unset (that is, left to its default of C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe).
  3. Witness the forward-slash generated command in the integrated terminal.
Details

I'm currently working on a script that uses os.path.join, os.path.basename, etc., and in particular uses basename(__file__) to get the path of the current script in a cross-platform way. This does intelligently interprets the forward slashes as path separators, and trims off the SCRIPT.py part, leaving a C:/Users... path. But then, subsequent joins with this path have mixed slashes, since join correctly uses backslash as a path separator on windows.

This isn't a problem for my script at the moment, since all file-access code (for instance, these mixed-slash paths are being passed to glob.glob) seems to be intelligently homogenizing the slashes. But it could become a problem in the future.

Activity

  1. added
    triage-neededNeeds assignment to the proper sub-team
    bugIssue identified by VS Code Team member as probable bug
    on Sep 6, 2020
  2. ghost removed
    triage-neededNeeds assignment to the proper sub-team
    on Sep 8, 2020
  3. ericsnowcurrently commented on Sep 8, 2020

    @ericsnowcurrently

    Tom Bertalan (@tsbertalan), thanks for letting us know about this. We'll take a look and get back to you as soon as possible.

  4. karrtikr commented on Apr 6, 2021

    @karrtikr

    Is this issue still happening with the latest version of the extension?

  5. tsbertalan commented on Apr 6, 2021

    @tsbertalan
    Author

    Yes, I'm usually running on Ubuntu these days (or, if on Windows, using the remote feature over SSH), so I don't bump up against this. However, I uninstalled and reinstalled the Python, Jupyter, and Pylance extensions just now (Python extension is now at v2021.3.680753044). I still see all-backslashes when running a script in debug mode, but, in run mode, backslashes in the prompt and forward slashes in the python.exe and BLAH.py path to the right of the prompt.

  6. karrtikr commented on Apr 6, 2021

    @karrtikr

    Tom Bertalan (@tsbertalan) Thanks for the prompt response. We think the general solution on how to launch scripts should come from VSCode, microsoft/vscode#108550.

    I'm converting this to a feature request under Github discussions to see how many users face this issue. My initial gut says that you seem to have a very special case where the way script is launched is important to you, but for most users it isn't so unfortunately I don't see us prioritizing to fix it ourselves.

  7. added
    feature-requestRequest for new features or functionality
    and removed
    info-neededIssue requires more information from poster
    bugIssue identified by VS Code Team member as probable bug
    on Apr 6, 2021
  8. removed their assignment
    on Apr 6, 2021
  9. locked and limited conversation to collaborators on Apr 6, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions