Eine weniger aufwändige (argh) Alternative zum Parsen eines Shellskripts (wo alle möglichen Befehle stehen können) ist es, das Skript von der Shell ausführen zu lassen, und in derselben Shell das neue Environment auszugeben.
Da fallen mir spontan zwei Möglichkeiten ein (env.sh enthält bei mir FOO=bar; "Popen" und "PIPE" kommen aus [mod]subprocess[/mod]):
1. wenn das Skript "export" verwendet (was es sollte), /proc:
Code: Alles auswählen
>>> Popen("sh -c '. ./env.sh; cat /proc/self/environ'", shell=True, env={}, stdout=PIPE).communicate()[0].split('\x00')[:-1]
['FOO=bar', 'PWD=/tmp']
2. "set", leider hat es da ein paar mehr shell-interne Variablen:
Code: Alles auswählen
>>> Popen("sh -c '. ./env.sh; set'", shell=True, env={}, stdout=PIPE).communicate()[0].splitlines()
["FOO='bar'", "IFS=' \t", "'", "OPTIND='1'", "PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'", "PPID='31286'", "PS1='$ '", "PS2='> '", "PS4='+ '", "PWD='/tmp'"]