Переменные среды настройки/чтения

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

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

Мне нужно установить некоторые переменные среды следующим образом:

DEBUSSY 1
FSDB 1

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

Ответ 1

Попробуйте использовать модуль 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 подпроцесс docs.

Ответ 2

Сначала первые вещи:). Чтение книг - отличный подход к решению проблем; это разница между исправлениями по методу оказания помощи и долгосрочными инвестициями в решение проблем. Никогда не упускайте возможность учиться.: 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.

(From 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/'

Ответ 3

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

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

Ответ 4

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

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