有关os.environ.get的问题:VSCode调试模式直接使用python

时间:2018-08-31 03:08:57

标签: visual-studio-code anaconda python-3.6

我知道模块os以及如何像os.environ.get('a', 'b')一样使用。 It will catch current environment variable 'a', if not exists will default to 'b'.

但是今天我有一个小问题。这是我关于这个问题的小项目:

.vscode/
    launch.json
.env
runme.py

对于 runme.py

import os

vv = os.environ.get('SETTINGS', 'Nothing')

print(vv)

.env 文件也非常简单,就像runme.py

SETTINGS = proj.settings.local

launch.json 中,遵循Python debugging configurations in VS Code

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/runme.py"
        }
    ]
}

然后,按 F5 ,我会在 INTERNAL TERMINAL

中看到期望的显示
>cd d:\tmp\tt && cmd /C "set "SETTINGS=proj.settings.local" && set "PYTHONIOENCODING=UTF-8" && set "PYTHONUNBUFFERED=1" && python c:\Users\tony\.vscode\extensions\ms-python.python-2018.7.1\pythonFiles\PythonTools\visualstudio_py_launcher.py d:\tmp\tt 62502 34806ad9-833a-4524-8cd6-18ca4aa74f14 RedirectOutput,RedirectOutput D:\tmp\tt/runme.py " 
proj.settings.local

但是当我只在COMMAND LINE python runme.py中运行命令时,我看到COMMAND LINE中打印了“ Nothing”。为什么?

是IDE(例如VSCode)为我做的吗?还是我对os module有误解?请给我解释一下。

1 个答案:

答案 0 :(得分:0)

这似乎是problem with VS Code。似乎.env文件的评估方式和应用于终端的方式不是很一致且可预测。

在我的测试过程中,如果使用调试功能(快捷键F5或Ctrl + F5),则仅会拾取.env文件。这导致.env的内容被注入到终端会话中。在关闭该终端之前,从该终端启动的程序中定义的变量将可用于程序的任何连续运行。您打开的任何新终端(即使它是VS Code中的新终端)也无法访问这些变量。

如果希望终端中的环境变量始终可用,则可以在OS级别上设置该环境变量。在Windows下,根据需要,使用系统属性/环境变量...,并将其放在用户变量或系统变量下。在Linux下,将其放在您的Shell .rc文件中。 请注意,您必须重新启动VS Code才能使更改生效。