Мне нужно установить некоторые переменные окружения в скрипте python, и я хочу, чтобы все остальные скрипты, которые вызываются из python, видели набор переменных окружения.
Если я сделаю
os.environ["DEBUSSY"] = 1`
он жалуется, говоря, что 1
должен быть строкой.
Я также хочу знать, как читать переменные окружения в python (в более поздней части скрипта), как только я его установлю.
python
environment-variables
prahallada
источник
источник
Ответы:
Переменные среды должны быть строками, поэтому используйте
установить переменную
DEBUSSY
в строку1
.Чтобы получить доступ к этой переменной позже, просто используйте:
Дочерние процессы автоматически наследуют переменные среды родительского процесса - никаких специальных действий с вашей стороны не требуется.
источник
putenv()
, но для этих Unixen вы ничего не можете сделать в любом случае. Даже старая версия AIX и HPUX, с которыми я работал, поддерживала ее. Если кто-то действительно сможет найти компьютер, не поддерживающий его сегодня, у меня есть серьезные сомнения, что он сможет запустить Python на этом компьютере. :)Возможно, вам придется рассмотреть некоторые дополнительные аспекты надежности кода;
когда вы сохраняете целочисленную переменную как переменную окружения, попробуйте
затем для извлечения учтите, что во избежание ошибок следует попробовать
возможно, заменить «-1» на «Не установлено»
так что, чтобы положить все это вместе
источник
myvar = int(os.environ.get('MYVAR')) if os.environ.get('MYVAR', '') != '' else None
- таким образом, это было бы Нет, если бы не было предоставлено числоvalue_not_set = '-1'
). Тогда вы можете использоватьdebussy = int(os.environ.get('DEBUSSY', value_not_set))
os.environ
ведет себя как словарь Python, так что все общие словарные операции могут быть выполнены. В дополнении кget
иset
операциям , упомянутых в других ответах, мы можем просто проверить , если ключ существует. Ключи и значения должны храниться в виде строк .Python 3
Для python 3 словари используют ключевое слово in вместо has_key
Python 2
Есть одна важная вещь, которую стоит отметить при использовании
os.environ
:Хотя дочерние процессы наследуют среду от родительского процесса, я недавно столкнулся с проблемой и выяснил, что если у вас есть другие сценарии, обновляющие среду во время работы сценария python,
os.environ
повторный вызов не будет отражать последние значения .Выдержка из документов :
os.environ.data
который хранит все переменные окружения, является объектом dict, который содержит все значения окружения:источник
os.environ.data
в Python 3.2 он был переименован вos.environ._data
префикс подчеркивания, показывающий, что вы не должны читать его напрямую. Во всяком случае,os.environ._data
не будет обновленных значений в любом случае.Тогда делай
Просто используйте
os.environ["DEBUSSY"]
, как висточник
установить переменную:
Метод назначения элемента по ключу:
получить или проверить, существует ли он или нет,
с тех пор - это экземпляр, вы можете попробовать объектный путь.
Способ 1:
получите
'1'
качестве возвращаемого значенияСпособ 2:
Способ 3:
Способ 4:
источник
Вы должны присвоить строковое значение переменной среды.
os.environ["DEBUSSY"] = "1"
Если вы хотите прочитать или распечатать переменную окружения, просто используйте
print os.environ["DEBUSSY"]
Эти изменения вступят в силу только для текущего процесса, которому он был назначен, и не изменит значение навсегда. Дочерние процессы автоматически наследуют среду родительского процесса.
источник
set [<name>=[<value>]]
но это только для текущего процесса. Когда я закрываю cmd, он не существует, и даже когда он открыт, другие программы не видят его.Как насчет
os.environ["DEBUSSY"] = '1'
? Переменные среды всегда являются строками.источник
Я пытался добавить переменные среды. Моя цель состояла в том, чтобы сохранить некоторую пользовательскую информацию в системных переменных, чтобы я мог использовать эти переменные для будущих решений в качестве альтернативы файлам конфигурации. Однако метод, описанный в приведенном ниже коде, мне совсем не помог.
Этот простой блок кода работает хорошо, однако эти переменные существуют внутри соответствующих процессов, так что вы не найдете их на вкладке переменных среды системных настроек Windows. Приведенный выше код не служил моей цели. Эта проблема обсуждается здесь: проблема сохранения переменной
Еще одна неудачная попытка. Итак, наконец, мне удалось успешно сохранить переменную в регистре среды окна, имитируя команды оболочки Windows, заключенные в системный класс пакета os. Следующий код описывает эту успешную попытку.
Я надеюсь, что это будет полезно для некоторых из вас.
источник
Следует отметить, что если вы попытаетесь установить переменную окружения для оценки bash, она не будет хранить то, что вы ожидаете. Пример:
Это не будет оцениваться как в оболочке, поэтому вместо
/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
пути вы получите буквальное выражение$(/usr/libexec/java_home)
.Обязательно оцените его перед установкой переменной среды, например так:
источник
Вы можете использовать
os.environ
словарь для доступа к переменным среды.Теперь проблема, с которой я столкнулся, заключается в том, что если бы я попытался использовать
os.system
для запуска командного файла, который устанавливает переменные среды (используя команду SET в файле **. Bat *), он не установил бы их для вашей среды Python (но для дочерний процесс, который создается с помощьюos.system
функции). Чтобы получить переменные, установленные в среде Python, я использую этот скрипт:источник
Когда вы играете с переменными среды (добавляете / модифицируете / удаляете переменные), хорошей практикой является восстановление предыдущего состояния при завершении функции.
Вам может понадобиться что-то вроде
modified_environ
контекстного менеджера, описанного в этом вопросе для восстановления переменных среды.Классическое использование:
источник