Я работаю над преобразованием старой системы пакетных файлов в python. Я столкнулся с пакетным файлом, который устанавливает переменные среды для командного файла, который его вызвал. Эти значения затем снова используются в будущих вызовах пакетных файлов. Кажется, что переменные среды меняют поток вызовов, но я не могу вернуть их обратно. Я прочитал здесь два разных потока, которые говорят о чем-то подобном, но это не совсем то же самое. Можно ли извлечь эти переменные среды из подпроцесса?Извлечь переменные среды из popen
Python subprocess/Popen with a modified environment
Set Environmental Variables in Python with Popen
Что я делаю сейчас:
p = Popen(process_, cwd=wd, stdout=PIPE, shell=True,
universal_newlines=True, stderr=STDOUT, env=env)
старый поток летучих мышей файлов:
foo.bat calls foo-setparam.bat
foo-setparam.bat sets some variables
foo.bat uses these variables
foo.bat calls bar.bat
bar.bat uses variables set by both foo.bat and foo-setparam.bat
Update: Я попытался добавить «вызов "перед моим параметром popen. У меня такое же поведение.
Я не уверен, что вы подразумеваете под _a batch-файлом, который устанавливает переменные среды для командного файла, который называется it_. Подпроцесс не может изменить среду вызывающего процесса. В лучшем случае командный файл может возвращать некоторый вывод вызывающему, который вызывающий может проверить, а затем решить изменить его собственную среду. –
Из моего понимания в .bat-файле команда вызова запускает целевой .bat-файл в той же среде. – Nickolouse
Любой пакетный файл, который вызывается через 'call subprog.bat' И что _NOT_ содержит команду' setlocal', может изменять среду пакетного файла вызывающего абонента ... – Aacini