如何使用Python从环境变量中获取最后的值?
我制作了一个批处理文件,然后设置环境变量,我用Python脚本调用它, 但我无法读取最后的值 我想要一条Python指令或其他东西,它会将最后的值带给我,或者刷新这些值如何使用Python从环境变量中获取最后的值?,python,windows,batch-file,environment-variables,Python,Windows,Batch File,Environment Variables,我制作了一个批处理文件,然后设置环境变量,我用Python脚本调用它, 但我无法读取最后的值 我想要一条Python指令或其他东西,它会将最后的值带给我,或者刷新这些值 setx PCL\u INC%cd%\PCL\PCL-1.6.0\include\PCL-1.6 蟒蛇 os.system(“F:\\Labeleditor\\build toolset\\scripts\\setenv\u VS2008\u 64位\u leV4”) self.gui.lineEdit_2.setText(os
setx PCL\u INC%cd%\PCL\PCL-1.6.0\include\PCL-1.6
蟒蛇
os.system(“F:\\Labeleditor\\build toolset\\scripts\\setenv\u VS2008\u 64位\u leV4”)
self.gui.lineEdit_2.setText(os.environ['PCL_INC'])
对于变量PCL_INC,我没有得到“PCL\PCL-1.6.0\include\PCL-1.6”
我得到了旧的价值
`每次启动新进程时,Windows都会为新进程(子进程)复制启动进程(父进程)的环境表。子进程(您案例中的批处理文件)可以修改其环境表。由该子进程启动的所有进程都会获得当前表的副本。但不可能从子进程操纵父进程的环境表。没有办法做到这一点 若您的批处理文件(子进程)修改了环境变量,并且希望在Python脚本(父进程)中包含这些变量的值,那个么在批处理文件的末尾需要
set >"%TEMP%\EnvValues.tmp"
它将所有环境变量及其值打印到临时文件目录中的文件EnvValues.tmp
。然后,只要批处理文件未修改环境变量TEMP的值,就可以从Python脚本中加载此文件并提取所需的环境值
如果您的Python脚本捕获了写入stdout
的批处理文件的所有输出,则可以只使用set
最后,如果您只对某些环境变量感兴趣,还可以在批处理文件中使用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"
将以空格作为分隔符的变量名称和值写入标准输出:
@echo off
echo ADTF_DIR %ADTF_DIR%
echo ADTF_ADDONS %ADTF_DIR%\addons
在读取批处理文件输出的数据后,不要忘记使用Python脚本删除临时文件。请发布您的代码?setx ADTF_DIR%ADTF_DIR%setx ADTF_ADDONS”%ADTF_DIR%\ADDONS“setx QTDIR”%cd%\Qt\Qt-4.7.1_win32_vc90“setx OSG_DIR”%cd%\OSG\OSG-3.2.0-win32-vc90“os.environ”['ADTF_ADDONS'],要读取该值,是否从脚本外部(在脚本运行时)更改环境变量?
setx
为将来的cmd进程设置变量,而不是为正在运行的进程本身设置变量。改为使用set
,它为正在运行的进程设置变量,但不为将来的进程设置变量。对于第二种解决方案,您的意思是这样的吗?斜体**粗体**`setx ADTF_DIR%ADTF_DIR%setx ADTF_ADDONS”%ADTF_DIR%\ADDONS“echo%ADTF_DIR%echo%ADTF_ADDONS%”见上面编辑的答案。你已经知道它的用途了吗setx
用于修改Windows注册表中的环境变量。这些是单击“环境变量”按钮后在“控制面板-系统-高级系统设置”下显示的环境变量。您真的想为当前用户或整个机器(具有管理员权限)设置持久变量吗?我尝试通过Batchfile设置值,我想从python获取值,并从python脚本调用Batchfile,但问题是我得到的是旧值。setx PCL\u INC%cd%\PCL\PCL-1.6.0\include\PCL-1.6
pythonos.system(“F:\\Labeleditor\\build toolset\\scripts\\setenv\u VS2008\u 64bit\u leV4”)self.gui.lineEdit\u 2.setText(os.environ['PCL\u INC'])
对于变量,我得不到“PCL\PCL-1.6.0\include\PCL-1.6”