1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCodeのPythonデバッガー構成で実行時に指定する引数が連結されてしまうことについて

Last updated at Posted at 2024-09-13

概要

Visual Studio Code(以下VSCode)を使用してPythonスクリプトをデバッグするとき、スクリプトに引数を渡したい時があります。その場合はデバッグ構成としてlaunch.jsonを作成すると、デバッグ開始時に任意の引数を指定できますが、空白で区切って複数の引数を指定するとそれらが連結された1つの引数として取り扱われることがあります。その対策です。

なお、今回の事象が発生した環境情報を以下に記載します。

D:\Project>code .

D:\Project>code --version
1.93.1
38c31bc77e0dd6ae88a4e9cc93428cc27a56ba40
x64

D:\Project>code --list-extensions --show-versions
ms-ceintl.vscode-language-pack-ja@1.93.2024091109
ms-python.debugpy@2024.10.0
ms-python.python@2024.14.1
ms-python.vscode-pylance@2024.9.1
visualstudioexptteam.intellicode-api-usage-examples@0.2.8
visualstudioexptteam.vscodeintellicode@1.3.1

D:\Project>python --version
Python 3.12.4

なお、VSCode拡張機能の情報取得は以下の記事を参考にしました。ありがとうございます。

VSCodeでのデバッグ

今回は以下のようなスクリプトを対象に検証しています。

main.py
import sys

print(sys.argv)

VSCodeでのデバッグはF5キー押下で開始します。そうすると、画面上部のコマンドパレットに、デバッガーの選択候補が表示されます。

SelectDebugger.png

通常は先頭の「Python Debbuger」を選択します。そうすると、デバッグ構成の選択候補が表示されます。

SelectConfig.png

引数などの情報が必要ない場合、先頭候補の「Python ファイル」を選択すると実際にデバッグが実行されます。今回のスクリプトでは以下のような結果が得られます。

AfterExecution.png

引数を指定したスクリプトのデバッグ

スクリプトに引数を渡したいときがありますが、前記の方法では引数を指定してのデバッグ実行はできません。そのような場合はデバッグ構成を追加します。構成を追加するには、launch.jsonというファイルを作成しますが、デバッグ実行が完了した状態のサイドバーに表示されている、「launch.jsonファイルを作成します」という部分をクリックします。

CreateLaunchJson.png

そうすると、再度デバッガー選択候補がコマンドパレットに表示され、

SelectDebugger2.png

「Python Debugger」を選択。続いて表示されるデバッグ構成の選択候補から、今度は「引数を含む Python ファイル」を選択します。

SelectConfig2.png

そうすると、実際の設定ファイル launch.json が既定の設定でオープンします。

DefaultLaunchJson.png

"args"の設定値 ${command.pickArgs} あたりが引数を受け取ってくれそうです。この内容のままファイルを閉じ、再びF5キーによりデバッグ実行を開始すると、今度は「コマンドライン引数」というタイトル付でコマンドパレットが表示されます。

WaitInputArg.png

ここに引数を入力すればよさそうです。入力欄下の説明書きに従い、引数を1つ入力しEnterキーを押下します。

Input1Arg.png

すると、ターミナルウィンドウに print(sys.argv) の実行結果が出力されます。

AfterExecutionWith1Arg.png

指定した引数 "abcde" をちゃんと受け取っているようです!めでたしめでたし。と思っていました。

複数の引数を指定すると...

予定していたスクリプトには、引数を複数指定することになっていました。なので、同じように引数を2つ入れて実行すると... なんだか引数の数が同じように1つになっています。

Input2Args.png

AfterExecutionWith2Args.png

どうやら入力した2つの引数が連結されて1つになってしまっているようです。念のため、スクリプトを直接実行すると、引数は2つ渡されていることが確認できます。うーん。

ExecuteNormally.png

設定変更を試す=>解決!

何とかならないものかと、Webを検索。特に引数の指定方法については以下の記事が参考になりました。

どうやら配列形式で指定すればよい様子。

"args": ["abcde", "12345"]

改めて、既定の設定内容を確認すると以下のようになっています。

"args": [
    "${command.pickArgs}"
]

command.pickArgs がコマンドパレットでの引数指定を受け取るんだとすると、この結果自体が配列になっている可能性がありそうです。なので、試しに外側の[]を除いて以下のような設定を行ってみました。

"args": "${command.pickArgs}"

再度デバッグ実行すると... 今度は引数が分かれて認識されました!

ModifyArgsSetting.png

AfterExecutionWith2Args2.png

なお、launch.json は作業フォルダーの .vscode サブフォルダーに格納されることがエクスプローラーを見ると確認できます。

PlaceOfLaunchJson.png

同じような事象で悩んだ方の参考になれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?