首页 > 开发 > Python > 正文

使用Python处理系统环境变量

2023-04-24 19:21:33
字体:
来源:转载
供稿:网友

环境变量在操作系统中用于指定操作系统运行环境的一些参数。如临时文件夹的位置,某种程序的搜索路径等。

环境变量使用变量名=具体值的方式进行指定,每个变量之间使用分号进行分隔。

Python操作环境变量原理

在Python中,你可以把系统环境变量当做一个字典来操作。环境变量的变量名称即为字典的键(key),而对应的键值就是对应的环境变量的值。

我们可以使用Python中os模块中的environ对系统变量进行相关操作。

Python中操作系统环境变量

Python中读取环境变量的所有值

下面这个例子用于输出所有的系统变量信息

import os

print(os.environ)

输出结果如下:

environ({'ALLUSERSPROFILE': 'C://ProgramData', 'APPDATA': 'C://Users//Kinglong//AppData//Roaming', 'COMMONPROGRAMFILES': 'C://Program Files//Common Files', 'COMMONPROGRAMFILES(X86)': 'C://Program Files (x86)//Common Files', 'COMMONPROGRAMW6432': 'C://Program Files//Common Files',  'COMSPEC': 'C://Windows//system32//cmd.exe', 'DRIVERDATA': 'C://Windows//System32//Drivers//DriverData', 'FPS_BROWSER_APP_PROFILE_STRING': 'Internet Explorer', 'FPS_BROWSER_USER_PROFILE_STRING': 'Default',  'HOME': 'C://Users//Kinglong', 'HOMEDRIVE': 'C:', 'HOMEPATH': '//Users//Kinglong',  'LOCALAPPDATA': 'C://Users//Kinglong//AppData//Local',  'NUMBER_OF_PROCESSORS': '8', 'NUTSUFFIX': '1', 'NUT_SUFFIXED_SEARCHING': '1', 'ONEDRIVE': 'D://onedrive', 'OS': 'Windows_NT', 'PATH': 'C://Windows//system32;C://Windows;C://Windows//System32//Wbem;C://Windows//System32//WindowsPowerShell//v1.0//;C://Windows//System32//OpenSSH//;C://Program Files (x86)//Microsoft SQL Server//100//Tools//Binn//;C://Program Files//Microsoft SQL Server//100//Tools//Binn//;C://Program Files//Microsoft SQL Server//100//DTS//Binn//;C://Program Files (x86)//Microsoft SQL Server//100//Tools//Binn//VSShell//Common7//IDE//;C://Program Files (x86)//Microsoft Visual Studio 9.0//Common7//IDE//PrivateAssemblies//;C://Program Files (x86)//Microsoft SQL Server//100//DTS//Binn//;C://Program Files//Microsoft SQL Server//130//Tools//Binn//;C://Program Files//Microsoft SQL Server//Client SDK//ODBC//170//Tools//Binn//;C://Program Files//dotnet//;C://Program Files (x86)//Rational//common;C://Users//Kinglong//AppData//Local//Programs//Python//Python310//Scripts//;C://Users//Kinglong//AppData//Local//Programs//Python//Python310//;C://Users//Kinglong//AppData//Local//Microsoft//WindowsApps;C://Users//Kinglong//.dotnet//tools;C://Program Files//JetBrains//PyCharm 2022.1.3//bin;',  'PROCESSOR_ARCHITECTURE': 'AMD64', 'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 140 Stepping 2, GenuineIntel', 'PROCESSOR_LEVEL': '6', 'PROCESSOR_REVISION': '8c02', 'PROGRAMDATA': 'C://ProgramData', 'PROGRAMFILES': 'C://Program Files', 'PROGRAMFILES(X86)': 'C://Program Files (x86)', 'PROGRAMW6432': 'C://Program Files', 'PSMODULEPATH': 'C://Program Files//WindowsPowerShell//Modules;C://Windows//system32//WindowsPowerShell//v1.0//Modules', 'PUBLIC': 'C://Users//Public', 'PYCHARM': 'C://Program Files//JetBrains//PyCharm 2022.1.3//bin;', 'RATL_RTHOME': 'C://Program Files (x86)//Rational//Rational Test',  'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C://Windows', 'TEMP': 'C://Users//Kinglong//AppData//Local//Temp', 'TMP': 'C://Users//Kinglong//AppData//Local//Temp', 'USERNAME': 'Kinglong', 'USERPROFILE': 'C://Users//Kinglong',  'WINDIR': 'C://Windows', 'ZES_ENABLE_SYSMAN': '1'})

可以看到这个输出结果很长,这跟操作系统和安装软件的内容的具体设置有关,每台电脑的信息不一定相同。

上面这个结果在一行中输出所有内容,显得有些凌乱,如果想让其按照键值的方式显示内容,你可以使用一个循环来处理。

import os

for k, v in os.inviron.items():
    print(f'{k}={v}')

输出结果如下:

ALLUSERSPROFILE=C:/ProgramData
APPDATA=C:/Users/Kinglong/AppData/Roaming
COMMONPROGRAMFILES=C:/Program Files/Common Files
COMMONPROGRAMFILES(X86)=C:/Program Files (x86)/Common Files
COMMONPROGRAMW6432=C:/Program Files/Common Files
COMSPEC=C:/Windows/system32/cmd.exe
DRIVERDATA=C:/Windows/System32/Drivers/DriverData
FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer
FPS_BROWSER_USER_PROFILE_STRING=Default
HOME=C:/Users/Kinglong
HOMEDRIVE=C:
HOMEPATH=/Users/Kinglong
LOCALAPPDATA=C:/Users/Kinglong/AppData/Local
NUMBER_OF_PROCESSORS=8
NUTSUFFIX=1
NUT_SUFFIXED_SEARCHING=1
ONEDRIVE=D:/onedrive
OS=Windows_NT
PATH=C:/Windows/system32;C:/Windows;C:/Windows/System32/Wbem;C:/Windows/System32/WindowsPowerShell/v1.0/;C:/Windows/System32/OpenSSH/;C:/Program Files (x86)/Microsoft SQL Server/100/Tools/Binn/;C:/Program Files/Microsoft SQL Server/100/Tools/Binn/;C:/Program Files/Microsoft SQL Server/100/DTS/Binn/;C:/Program Files (x86)/Microsoft SQL Server/100/Tools/Binn/VSShell/Common7/IDE/;C:/Program Files (x86)/Microsoft Visual Studio 9.0/Common7/IDE/PrivateAssemblies/;C:/Program Files (x86)/Microsoft SQL Server/100/DTS/Binn/;C:/Program Files/Microsoft SQL Server/130/Tools/Binn/;C:/Program Files/Microsoft SQL Server/Client SDK/ODBC/170/Tools/Binn/;C:/Program Files/dotnet/;C:/Program Files (x86)/Rational/common;C:/Users/Kinglong/AppData/Local/Programs/Python/Python310/Scripts/;C:/Users/Kinglong/AppData/Local/Programs/Python/Python310/;C:/Users/Kinglong/AppData/Local/Microsoft/WindowsApps;C:/Users/Kinglong/.dotnet/tools;C:/Program Files/JetBrains/PyCharm 2022.1.3/bin;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 140 Stepping 2, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=8c02
PROGRAMDATA=C:/ProgramData
PROGRAMFILES=C:/Program Files
PROGRAMFILES(X86)=C:/Program Files (x86)
PROGRAMW6432=C:/Program Files
PSMODULEPATH=C:/Program Files/WindowsPowerShell/Modules;C:/Windows/system32/WindowsPowerShell/v1.0/Modules
PUBLIC=C:/Users/Public
PYCHARM=C:/Program Files/JetBrains/PyCharm 2022.1.3/bin;
RATL_RTHOME=C:/Program Files (x86)/Rational/Rational Test
SESSIONNAME=Console
SYSTEMDRIVE=C:
SYSTEMROOT=C:/Windows
TEMP=C:/Users/Kinglong/AppData/Local/Temp
TMP=C:/Users/Kinglong/AppData/Local/Temp
USERNAME=Kinglong
USERPROFILE=C:/Users/Kinglong
WINDIR=C:/Windows
ZES_ENABLE_SYSMAN=1

这个结果要比上一个清晰的多,阅读比较方便。

Python读取特定环境变量的值

有时我们需要读取特定变量的值,下面这段程序可以实现这个要求。

import os

temp_dir = os.environ['temp']
path = os.environ['path']

print(f'临时文件夹:{temp_dir},/r/n路径:{path}')

输出结果如下:

临时文件夹:C:/Users/Kinglong/AppData/Local/Temp,

路径:C:/Windows/system32;C:/Windows;C:/Windows/System32/Wbem;C:/Windows/System32/WindowsPowerShell/v1.0/;C:/Windows/System32/OpenSSH/;C:/Program Files (x86)/Microsoft SQL Server/100/Tools/Binn/;C:/Program Files/Microsoft SQL Server/100/Tools/Binn/;C:/Program Files/Microsoft SQL Server/100/DTS/Binn/;C:/Program Files (x86)/Microsoft SQL Server/100/Tools/Binn/VSShell/Common7/IDE/;C:/Program Files (x86)/Microsoft Visual Studio 9.0/Common7/IDE/PrivateAssemblies/;C:/Program Files (x86)/Microsoft SQL Server/100/DTS/Binn/;C:/Program Files/Microsoft SQL Server/130/Tools/Binn/;C:/Program Files/Microsoft SQL Server/Client SDK/ODBC/170/Tools/Binn/;C:/Program Files/dotnet/;C:/Program Files (x86)/Rational/common;C:/Users/Kinglong/AppData/Local/Programs/Python/Python310/Scripts/;C:/Users/Kinglong/AppData/Local/Programs/Python/Python310/;C:/Users/Kinglong/AppData/Local/Microsoft/WindowsApps;C:/Users/Kinglong/.dotnet/tools;C:/Program Files/JetBrains/PyCharm 2022.1.3/bin;

上面的代码实现了输出了系统的临时存储目录和程序运行的搜索路径。

这样就可以根据用户的需要来读取指定的系统变量值。

Python判断指定的系统变量是否存在

上面的程序实现了读取指定系统变量的值,但如果指定的系统变量不存在时,将会引发KeyError错误,为了较好的处理这个问题,我们可以在操作指定系统变量之前先判断一下该系统变量是否存在,具体操作方法如下:

import os

what_vars = [ 'temp', 'VeVb.com']
for v in what_vars:
   if v in os.environ:
        print(f'{v} = {os.environ[v]}')
   else:
        print(f'{v}在系统变量中不存在。')

输出结果如下:

temp = C:/Users/Kinglong/AppData/Local/Temp
VeVb.com在系统变量中不存在。

使用os.environ.get()方法获取环境变量的值

使用os.environ.get()方法也可以避免出现KeyError错误。当指定的环境变量不存在时,os.environ.get()方法将返回None值。该方法也可以指定一个默认值,当指定的环境变量不存在时将返回指定的默认值。

import os

what_var1, what_var2, what_var3 = 'temp', 'syspath', 'java'
print(os.environ.get(what_var1))
print(os.environ.get(what_var2))
print(os.environ.get(what_var3, 'java_home'))

输出结果:

C:/Users/Kinglong/AppData/Local/Temp
None
java_home

上面程序中,what_var2what_var3指定的环境变量是不存在的,所以在使用what_var2输出指定环境变量的值时,其输出了None,而我们给what_var3指定了默认值,则其输出了其指定的默认值"java_home"

Python中设置环境变量的值

在Python中可以使用下面的方法设置环境变量。

import os

print(f"修改前:{os.environ.get('TMP')}")
os.environ['tmp'] = f'D:/Files'
print(f"修改后:{os.environ.get('TMP')}")

输出结果:

修改前:C:/Users/Kinglong/AppData/Local/Temp
修改后:D:/Files

要注意使用这种方式不能真正的修改系统的环境变量值,它只是修改了Python当前解释器运行中的值。同时,在使用该方法修改系统变量的值时,该值必须使用字符串的形式给出,即使是数值也需要指定为字符串的格式。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表