我创建了一个批处理文件,然后设置环境变量,我在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”
我老了 `
答案 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脚本删除临时文件。