如何编写Python脚本将VS Code的launch.json转换为终端命令?
问题:VS Code launch.json转终端命令的Python脚本报错修复
需求:编写Python脚本,将VS Code的launch.json片段转换为终端可执行命令,用于和非VS Code用户沟通。
原代码:
import json launch_json = ''' { "name": "temp", "type": "python", "request": "launch", "program": "script.py", "console": "integratedTerminal", "justMyCode": false, "args": ["abcd", "--log", "log.txt"], "env": {"CUDA_VISIBLE_DEVICES":"0"}, } ''' d = json.loads(launch_json) command = d["program"] + " " + " ".join(d["args"]) print(command)
运行报错:
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 12 column 9 (char 344)
解决方法
1. 修复JSON格式错误
报错的直接原因是两处JSON格式问题:
- 原字符串里的
"是HTML转义的双引号,JSON解析器无法识别,需替换为原生双引号" env键值对末尾的逗号是多余的,JSON不允许最后一个键值对后加尾随逗号,必须删除
2. 完善命令生成逻辑
原代码只拼接了程序和参数,遗漏两个关键部分:
- Python解释器前缀:因为launch.json的
type是python,终端命令需要以python(或python3)开头 - 环境变量:launch.json里的
env配置需要以VAR=VALUE的形式拼接到命令最前面
修正后的完整脚本
import json launch_json = ''' { "name": "temp", "type": "python", "request": "launch", "program": "script.py", "console": "integratedTerminal", "justMyCode": false, "args": ["abcd", "--log", "log.txt"], "env": {"CUDA_VISIBLE_DEVICES":"0"} } ''' # 解析JSON配置 config = json.loads(launch_json) # 生成环境变量前缀:VAR1=VALUE1 VAR2=VALUE2 env_part = " ".join([f"{key}={value}" for key, value in config.get("env", {}).items()]) # 生成命令主体:python program.py arg1 arg2... cmd_parts = ["python", config["program"]] + config.get("args", []) command_body = " ".join(cmd_parts) # 拼接完整命令(如果有环境变量则前置) full_command = f"{env_part} {command_body}".strip() print(full_command)
输出结果
运行后会生成符合终端执行的完整命令:
CUDA_VISIBLE_DEVICES=0 python script.py abcd --log log.txt
内容的提问来源于stack exchange,提问作者adroit.levees.0r
相关产品推荐
相关产品推荐

