Настройки среды всегда происходят в дочернем процессе и никогда напрямую не влияют на родительский процесс. Однако вы можете запустить (в том же дочернем процессе, который изменил свою среду, в самом конце этого процесса) команду (env
в Unix-подобной среде, я считаю set
в DOS, где .bat
файлы жили и в Windows, где .cmd
файлы похожи), который выводит среду в стандартный вывод или в файл; родительский процесс может прочитать этот файл и применить изменения в своей среде.
В Unix subprocess.Popen('thescript; env', shell=True, stdout=...)
может быть достаточно. В Windows я не уверен, что передача в качестве первого аргумента foo.bat; set
будет работать; если это не так, просто создайте крошечную временную «вспомогательную летучую мышь», которая делает foo.bat
, затем set
, и запустите ее вместо этого.