Мне нужно написать 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"}
Возможно ли это?
Нет, любые изменения, внесенные в переменные среды в подпроцессе, остаются в этом подпроцессе. (Насколько я знаю, это так) Когда подпроцесс завершается, его среда теряется.
Я предлагаю получить оболочку script для печати своей среды или, по крайней мере, переменных, которые вам нужны, ее стандартного вывода (или стандартной ошибки, или он может записать их в файл), и вы можете прочитать вывод из Python.
bash -c '. <env_setting_script>; env'
По сути, ваша подоболочка получает исходные тексты среды, а затем сама распечатывает ее, а не заставляет скрипт делать это напрямую.
Я согласен с сообщением Дэвида.
Perl имеет Shell:: Source, который делает это. Он работает, запустив script в подпроцессе, добавленном с помощью env
, который создает список пар переменных значений, разделенных символом =
. Вы можете проанализировать это и "импортировать" среду в свой процесс. Модуль стоит посмотреть, если вам нужно такое поведение.