it-swarm.com.ru

Чтение и запись переменных среды в Python?

Возможный дубликат:
Как установить переменные окружения в Python

Мой сценарий python, который вызывает многие функции python и ​​сценарии оболочки. Я хочу установить переменную окружения в Python (основная вызывающая функция) и все дочерние процессы, включая сценарии оболочки, чтобы увидеть набор переменных окружения.

Мне нужно установить некоторые переменные среды, как это:

DEBUSSY 1
FSDB 1

1 это число, а не строка. Кроме того, как я могу прочитать значение, хранящееся в переменной среды? (Как и DEBUSSY/FSDB в другом python дочернем скрипте.)

131
user749632

Попробуйте использовать модуль os.

import os

os.environ['DEBUSSY'] = '1'
os.environ['FSDB'] = '1'

# Open child processes via os.system(), popen() or fork() and execv()

someVariable = int(os.environ['DEBUSSY'])

Смотрите Документы Python на os.environ. Также, для порождения дочерних процессов, смотрите Python's subprocess docs .

265
voithos

Перво-наперво :) чтение книг - это отличный подход к решению проблем; это разница между исправлениями, связанными с бинтом, и долгосрочными инвестициями в решение проблем. Никогда не упускайте возможность учиться. : D

Вы можете выбрать , чтобы интерпретировать 1 как число, но переменные среды не заботятся. Они просто передают строки:

   The argument envp is an array of character pointers to null-
   terminated strings. These strings shall constitute the
   environment for the new process image. The envp array is
   terminated by a null pointer.

(От environ(3posix).)

Вы получаете доступ к переменным среды в python, используя os.environ словарь-подобный объект :

>>> import os
>>> os.environ["HOME"]
'/home/sarnold'
>>> os.environ["PATH"]
'/home/sarnold/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games'
>>> os.environ["PATH"] = os.environ["PATH"] + ":/silly/"
>>> os.environ["PATH"]
'/home/sarnold/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/silly/'
34
sarnold

Если вы хотите передать глобальные переменные в новые сценарии, вы можете создать файл python, который предназначен только для хранения глобальных переменных (например, globals.py). Когда вы импортируете этот файл вверху дочернего скрипта, он должен иметь доступ ко всем этим переменным.

Если вы пишете в эти переменные, то это уже другая история. Это включает параллелизм и блокировку переменных, в которые я не буду входить, если вы не захотите.

3
systemizer

Используйте os.environ[str(DEBUSSY)] для чтения и письма ( http://docs.python.org/library/os.html#os.environ ).

Что касается чтения, вы, конечно, должны разобрать номер из строки самостоятельно.

1
piro