Как я могу получить последние значения из переменных среды с Python?
Я сделал пакетный файл, который затем устанавливает переменные окружения, и я вызываю его в скрипте Python, но я не смог прочитать последние значения.
Я хочу инструкцию или что-то в Python, чтобы он приносил мне последние значения или обновлял значения.
setx PCL_INC %cd%\PCL\PCL-1.6.0\include\pcl-1.6
питон
os.system("F:\\Labeleditor\\build-toolset\\scripts\\setenv_VS2008_64bit_leV4")
self.gui.lineEdit_2.setText(os.environ['PCL_INC'])
я не получаю "PCL\PCL-1.6.0\include\pcl-1.6" для переменной PCL_INC
я получаю старое значение `
1 ответ
Каждый раз, когда запускается новый процесс, Windows создает копию таблицы среды запуска процесса (родительский процесс) для нового процесса (дочерний процесс). Дочерний процесс - пакетный файл в вашем случае - может изменить свою таблицу окружения. И все процессы, запущенные этим дочерним процессом, получают копию текущей таблицы. Но из дочернего процесса невозможно манипулировать таблицей окружения родительского процесса. Нет способа сделать это.
Если ваш пакетный файл (дочерний процесс) изменяет переменные среды, и вы хотите, чтобы их значения были в вашем скрипте Python (родительский процесс), вам нужно в конце вашего пакетного файла что-то вроде
set >"%TEMP%\EnvValues.tmp"
который печатает все переменные окружения со своими значениями в файл EnvValues.tmp
в каталоге для временных файлов. Затем вы можете загрузить этот файл из скрипта Python и извлечь значения среды, которые вам нужны, если значение переменной среды TEMP не было изменено командным файлом.
Вы можете использовать только set
если ваш скрипт Python захватывает весь вывод командного файла, записанного в stdout
,
Наконец, если вас интересуют только некоторые переменные окружения, вы также можете использовать echo
в командном файле, чтобы вывести только значения, представляющие интерес либо захваченные из stdout
или перенаправлен во временный файл, который считывается скриптом Python после завершения пакетного файла.
Пример:
Запишите имена и значения переменных со знаком равенства в качестве разделителя в файл:
@echo off
echo ADTF_DIR=%ADTF_DIR%>"%TEMP%\EnvValues.tmp"
echo ADTF_ADDONS=%ADTF_DIR%\addons>>"%TEMP%\EnvValues.tmp"
Запишите только значения в файл:
@echo off
echo %ADTF_DIR%>"%TEMP%\EnvValues.tmp"
echo %ADTF_DIR%\addons>>"%TEMP%\EnvValues.tmp"
Запишите имена и значения переменных с пробелом в качестве разделителя для stdout
:
@echo off
echo ADTF_DIR %ADTF_DIR%
echo ADTF_ADDONS %ADTF_DIR%\addons
Не забудьте удалить временный файл с помощью скрипта Python после считывания данных, выведенных командным файлом.