# 環境

  * Window10 pro
  * VScode 1.70.2
  * python venvによる仮想環境 /ENVフォルダ下にPython 3.9.10 <\- pythonインタプリタ選択済み
  * Powershell Extension v2022.7.2
  * VScode拡張機能  
PowerShell  
Python  
Python Extended  
Python Extension Pack  
Python Docs  
Code Runner  
..etc

# 目的

普段は、Pythonでの開発なので、F5デバッグ実行はPython仮想環境下にあるPythonが実行されます。  
Powershellスクリプト
によるドキュメント作成自動化なども行います。Powershellスクリプトの実行にはCodeRunnerを使用していましたが、今まで動作していたスクリプトが何らかの要因でエラーが発生してしまい、デバッグして追いかけたいと思いました。  
しかし、Powershellスクリプトを開き、カレントファイルとして、[実行]->[デバッグ開始]をすると、Pythonスクリプトとして実行しようとしてしまいます。

実行時ターミナルの様子

```

    (ENV) PS [カレントフォルダ]> c:; cd '[カレントフォルダ]'; & '[カレントフォルダ]\ENV\Script\python.exe' '[(省略)..\pythonFiles\lib\debugpy\adpter/../..\debugpy\launcher]' '55292' '--' '[カレントファイル]'
    
```

上記の[カレントファイル]は、この場合、ps1ファイルとなります。

・ps1ファイルを判断して、Powershellデバッグ実行  
・pyファイルを判断して、Pythonデバッグ実行  
という環境にできないかという相談です。

## launch.json

```

    {
        // IntelliSense を使用して利用可能な属性を学べます。
        // 既存の属性の説明をホバーして表示します。
        // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Python: Current File",
                "type": "python",
                "request": "launch",
                "program": "${file}",
                "console": "integratedTerminal",
                "justMyCode": true
            }
        ]
    }
    
```

## setting.json

```

    {
      "esbonio.server.enabled": true,
      "esbonio.sphinx.confDir": "",
      "restructuredtext.preview.name": "docutils",
      "files.encoding": "utf8bom"
    }
    
```
CC BY-SA 4.0
2022-08-19T00:58:04.660
90623
2022-08-19T03:27:21.560
32891
question
python vscode powershell debugging
VScode でPowershell デバッグとpythonデバッグを共存させる方法
Powershellをごくまれにしか使わないならば、`launch.json`にPowershellの構成を追加して`launch.json画面左上の「実行とデバッグ」右のコンボボックスから選択する方法がシンプルだと思います。

拡張子で自動的にファイル判別をする場合は[Command
Variable](https://marketplace.visualstudio.com/items?itemName=rioj7.command-
variable)拡張機能を使うことで実現可能です。  
下記の`launch.json`例では、画面左上の「実行とデバッグ」右のコンボボックスから「Debug Python or
Powershell」を選択すると`.ps1`と`.py`を自動判別実行できます。  
ただしターミナルの表示が自動的に切り替わってくれないので、画面右下の縦タブから手動で切り替えを行う必要があります。

**launch.json**

```

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Python: Current File if .py",
                "type": "python",
                "request": "launch",
                "program": "${input:file_if_python}",
                "console": "integratedTerminal",
                "justMyCode": true
            },
            {
                "name": "PowerShell: Current File if .ps1",
                "type": "PowerShell",
                "request": "launch",
                "script": "${input:script_if_powershell}",
                "cwd": "${input:script_if_powershell}" 
            }
        ],
        "compounds": [
          {
            "name": "Debug Python or Powershell",
            "configurations": ["Python: Current File if .py", "PowerShell: Current File if .ps1"]
          }
        ],
        "inputs": [
          {
            "id": "file_if_python",
            "type": "command",
            "command": "extension.commandvariable.file.fileAsKey",
            "args": {
              ".py": "${file}",
              ".ps1": "${workspaceFolder}\\.vscode\\dummy" 
            }
          },
          {
            "id": "script_if_powershell",
            "type": "command",
            "command": "extension.commandvariable.file.fileAsKey",
            "args": {
              ".ps1": "${file}",
              ".py": "${workspaceFolder}\\.vscode\\dummy" 
            }
          }
        ]
    }
    
```

[![スクリーンショット](https://i.stack.imgur.com/85JyF.png)](https://i.stack.imgur.com/85JyF.png)

**参考資料**

  * [Define multiple launch configurations in VS Code basing on file extensionの回答](https://stackoverflow.com/a/64601770)
  * [Command Variable](https://marketplace.visualstudio.com/items?itemName=rioj7.command-variable)
  * [Debugging in Visual Studio Code](https://code.visualstudio.com/docs/editor/debugging)
CC BY-SA 4.0
2022-08-19T03:27:21.560
90627
2022-08-19T03:27:21.560
9820
90623
answer