Как я могу импортировать переменные окружения завершенного процесса в Python?

1

Мне нужно написать python script, который запускает оболочку script и импортирует переменные среды ПОСЛЕ завершения script.

У вас есть оболочка script "a.sh":

export MYVAR="test"

В python я хотел бы сделать что-то вроде:

import os
env={}
os.spawnlpe(os.P_WAIT,'sh', 'sh', 'a.sh',env)
print env

и получим:

{'MYVAR'="test"}

Возможно ли это?

  • 0
    Спасибо! И Дэвид, и Нуфал ответили на вопрос!
Теги:
environment-variables

2 ответа

5
Лучший ответ

Нет, любые изменения, внесенные в переменные среды в подпроцессе, остаются в этом подпроцессе. (Насколько я знаю, это так) Когда подпроцесс завершается, его среда теряется.

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

  • 1
    Это, вероятно, лучший способ сделать это. Однако я бы добавил, что если невозможно изменить сценарий оболочки, определяющий значения, вы можете изменить команду на bash -c '. <env_setting_script>; env' По сути, ваша подоболочка получает исходные тексты среды, а затем сама распечатывает ее, а не заставляет скрипт делать это напрямую.
0

Я согласен с сообщением Дэвида.

Perl имеет Shell:: Source, который делает это. Он работает, запустив script в подпроцессе, добавленном с помощью env, который создает список пар переменных значений, разделенных символом =. Вы можете проанализировать это и "импортировать" среду в свой процесс. Модуль стоит посмотреть, если вам нужно такое поведение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню