Мне нужно установить некоторые переменные окружения в скрипте Python, и я хочу, чтобы все другие скрипты, вызываемые из Python, видели набор переменных окружения.
Если я сделаю,
os.environ["DEBUSSY"] = 1
он жалуется, говоря, что 1 должна быть строка.
Я также хочу знать, как читать переменные окружения в Python (в последней части скрипта) после того, как я его установлю.
Переведено автоматически
Ответ 1
Переменные окружения должны быть строками, поэтому используйте
import os os.environ["DEBUSSY"] = "1"
установить переменную DEBUSSY в строку 1.
Чтобы получить доступ к этой переменной позже, просто используйте
print(os.environ["DEBUSSY"])
Дочерние процессы автоматически наследуют окружение родительского процесса - никаких специальных действий с вашей стороны не требуется.
Ответ 2
Возможно, вам потребуется рассмотреть некоторые дополнительные аспекты для повышения надежности кода;
когда вы сохраняете целочисленную переменную в качестве переменной окружения, попробуйте
os.environ['DEBUSSY'] = str(myintvariable)
затем для извлечения учтите, что во избежание ошибок вам следует попробовать
os.environ ведет себя как словарь python, поэтому могут выполняться все обычные операции со словарем. В дополнение к get и set операциям, упомянутым в других ответах, мы также можем просто проверить, существует ли ключ. Ключи и значения должны храниться в виде строк.
Python 3
Для python 3 словари используют ключевое слово in вместо has_key
>>> import os >>> 'HOME'in os.environ # Check an existing env. variable True ...
Python 2
>>> import os >>> os.environ.has_key('HOME') # Check an existing env. variable True >>> os.environ.has_key('FOO') # Check for a non existing variable False >>> os.environ['FOO'] = '1'# Set a new env. variable (String value) >>> os.environ.has_key('FOO') True >>> os.environ.get('FOO') # Retrieve the value '1'
Есть одна важная вещь, на которую следует обратить внимание при использовании os.environ:
Хотя дочерние процессы наследуют среду от родительского процесса, недавно я столкнулся с проблемой и выяснил, что если у вас есть другие скрипты, обновляющие среду во время выполнения вашего скрипта python, то os.environ повторный вызов не отразит последние значения.
Это сопоставление фиксируется при первом импорте модуля операционной системы, обычно во время запуска Python как части обработки site.py. Изменения в среде, внесенные по истечении этого времени, не отражаются в os.environ, за исключением изменений, внесенных путем прямой модификации os.environ.
os.environ.data который хранит все переменные окружения, является объектом dict, который содержит все значения окружения:
>>> type(os.environ.data) # changed to _data since v3.2 (refer comment below) <type'dict'>
Ответ 4
Перед использованием этого метода, пожалуйста, ознакомьтесь с разделами комментариев
Я пытался добавить переменные окружения. Моей целью было сохранить некоторую пользовательскую информацию в системных переменных, чтобы я мог использовать эти переменные для будущих решений, в качестве альтернативы файлам конфигурации. Однако метод, описанный в приведенном ниже коде, мне совсем не помог.
import os os.environ["variable_1"] = "value_1" os.environ["variable_2"] = "value_2" # To Verify above code os.environ.get("variable_1") os.environ.get("variable_2")
Этот простой блок кода работает хорошо, однако эти переменные существуют внутри соответствующих процессов, так что вы не найдете их на вкладке переменные окружения системных настроек Windows. В значительной степени приведенный выше код не соответствовал моей цели. Эта проблема обсуждается здесь: проблема сохранения переменной
os.environ.putenv(key, value)
Еще одна неудачная попытка. Итак, наконец, мне удалось успешно сохранить переменные внутри регистра среды window, имитируя команды оболочки Windows, заключенные в системный класс пакета os. Следующий код описывает эту успешную попытку.
os.system("SETX {0} {1} /M".format(key, value))
Я надеюсь, что это будет полезно для некоторых из вас.