Вопрос о os.environ.get: режим отладки VSCode V.S. напрямую работать с питоном - PullRequest
0 голосов
/ 31 августа 2018

Я знаю модуль os и как использовать как os.environ.get('a', 'b'). Он будет перехватывать текущую переменную окружения 'a', если не существует, по умолчанию будет '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 в VS Code

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

После этого нажмите F5 , я вижу то, что ожидаю увидеть в ВНУТРЕННИЙ ТЕРМИНАЛ

>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, я увидел «Nothing», напечатанное в COMMAND LINE. ПОЧЕМУ?

Это IDE (напр .: VSCode) подходит для меня? Или я что-то не так понимаю по поводу os module? Пожалуйста, объясни мне это.

1 Ответ

0 голосов
/ 21 октября 2018

Это похоже на проблему с VS Code . Кажется, что способ .env-файла оценивается и применяется к терминалу не очень согласованно и предсказуемо.

Во время моего теста файл .env выбирается только при использовании функции отладки (сочетание клавиш F5 или Ctrl + F5). Это приводит к тому, что содержимое .env внедряется в терминальную сессию. Пока вы не закроете этот терминал, переменные, которые вы там определили, будут доступны для любых последовательных запусков вашей программы (программ), если они запускаются с этого терминала. Любой новый терминал, который вы открываете (даже если это новый терминал внутри кода VS), не будет иметь доступа к этим переменным.

Если вы хотите, чтобы переменная среды всегда была доступна в терминале, вы можете установить эту переменную среды на уровне ОС. В Windows используйте Системные свойства / Переменные среды ... и поместите их в Пользовательские переменные или Системные переменные, в зависимости от ваших потребностей. Под Linux, поместите это в свой файл оболочки .rc. Обратите внимание, что вам нужно перезапустить VS Code, чтобы изменения вступили в силу.

...