我知道模块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
有误解?请给我解释一下。
答案 0 :(得分:0)
这似乎是problem with VS Code。似乎.env文件的评估方式和应用于终端的方式不是很一致且可预测。
在我的测试过程中,如果使用调试功能(快捷键F5或Ctrl + F5),则仅会拾取.env文件。这导致.env的内容被注入到终端会话中。在关闭该终端之前,从该终端启动的程序中定义的变量将可用于程序的任何连续运行。您打开的任何新终端(即使它是VS Code中的新终端)也无法访问这些变量。
如果希望终端中的环境变量始终可用,则可以在OS级别上设置该环境变量。在Windows下,根据需要,使用系统属性/环境变量...,并将其放在用户变量或系统变量下。在Linux下,将其放在您的Shell .rc文件中。 请注意,您必须重新启动VS Code才能使更改生效。