Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python从环境变量中获取最后的值?_Python_Windows_Batch File_Environment Variables - Fatal编程技术网

如何使用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

我制作了一个批处理文件,然后设置环境变量,我用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.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
python
os.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”