如何使用Python从环境变量中获取最后的值?

时间:2014-10-23 15:29:16

标签: python windows batch-file environment-variables

我创建了一个批处理文件,然后设置环境变量,我在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_INC的“PCL \ PCL-1.6.0 \ include \ pcl-1.6”

我老了 `

1 个答案:

答案 0 :(得分:1)

每次启动新进程时,Windows都会为新进程(子进程)创建启动进程(父进程)的环境表的副本。子进程 - 您的案例中的批处理文件 - 可以修改其环境表。此子进程启动的所有进程都获得当前表的副本。但是不可能从子进程操作父进程的环境表。没有办法做到这一点。

如果您的批处理文件(子进程)修改了环境变量,并且您希望在Python脚本(父进程)中使用它们的值,则需要在批处理文件的末尾添加类似

的文件。
set >"%TEMP%\EnvValues.tmp"

将所有环境变量及其值打印到临时文件的目录中的文件EnvValues.tmp中。然后,只要批处理文件未修改环境变量TEMP的值,就可以从Python脚本中加载此文件并提取所需的环境值。

如果您的Python脚本捕获写入set的批处理文件的所有输出,则只能使用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脚本删除临时文件。