使用VS Code在调试时先进行Source

  1. 1. 问题
  2. 2. 解决方案
    1. 2.1. 修改intera.sh
    2. 2.2. 配置vscode

问题

在使用VS Code调试Sawyer SDK的时候,发现不能进入Intera的环境下。如果是一般运行Sawyer的Python控制代码,需要先执行./intera.sh进入SDK环境,再运行Python命令。这里可以把./intera.sh加入.bashrc,但显然这不美观。

解决方案

修改intera.sh

这里首先观察intera.sh的内容,实际上是在执行时生成了一个rc文件的内容,保存在临时文件内,然后在以这个文件作为rc文件的前提下启动了一个新的bash。所以根据这一过程,我们为了保留rc文件产生的环境变量,需要修改intera.sh的内容,将最后的bash改为source,这样就可以在当前环境下进行source,而不是新建一个bash。

这里为了保持intera.sh的原始内容,我们将修改后的内容保存为intera_source.sh。

配置vscode

虽然我们已经将文件的命令改成了source,但是在VS Code中进行Python调试的时候,如果在preLaunchTask直接设置source intera_source.sh,依然不能保存环境变量,因为执行preLaunchTask的时候,VS Code会新建一个bash,而不是在当前bash下进行source。

所以我们需要在执行preLaunchTask的时候,将环境变量保存在一个文件中,然后在launch.json中的envFile中指定这个文件,这样就可以在调试的时候使用这个文件中的环境变量了。

最后我们应该设置的launch.json如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"preLaunchTask": "source_intera",
"program": "${file}",
"console": "integratedTerminal",
"envFile": "${workspaceFolder}/.env"
}
],
}

并且添加上task.json

1
2
3
4
5
6
7
8
9
{
"tasks": [
{
"label": "source_intera",
"type": "shell",
"command": "source intera_source.sh && env > ${workspaceFolder}/.env"
}
]
}

该内容采用 CC BY-NC-ND 4.0 许可协议,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。