文章目录
- 1 访问和修改环境变量
 - 1.1 访问环境变量
 - 1.2 修改环境变量
 
- 2 进程的用户和组
 - 2.1 进程的ID
 - 2.2 进程的用户
 - 2.3 进程组
 
os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面。
 这里整理了环境变量、进程的用户和用户组相关的控制方法。
参考:os模块官方文档
1 访问和修改环境变量
1.1 访问环境变量
-  
os.environ一系列的表示环境变量的键值对。
os.environ的值是在初次导入os模块时载入的。后续再修改环境变量,其值不会发生变化。
os.environ可以用于修改环境变量。其键值对被修改时,会自动调用os.putenv()。
os.environ中的元素被删除时,会自动调用os.unsetenv(),相应的环境变量也会被删除。>>> os.environ environ({'键': '值', ...}) -  
os.environb表示环境变量的键值对,键和值都是bytes对象。
os.environb和os.environ是同步的,一个被修改,另一个也会跟着变化。 -  
os.getenv(key, default=None)根据字符串键从os.environ获取环境变量。 -  
os.getenvb(key, default=None)根据字节串键从os.environb获取环境变量。 -  
os.get_exec_path(env=None)返回用于搜索可执行文件的目录列表。
在shell中使用python命令时,会在这些列表中找python的可执行文件。
参数env为可搜索PATH的环境变量字典。默认会使用os.environ的值。>>> os.get_exec_path() ['/usr/local/sbin', '/usr/local/bin', '/usr/sbin', '/usr/bin'] >>> os.environ["PATH"] '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin' -  
os.supports_bytes_environ操作系统的原生环境类型是字节型则为True,否则为False。
os.supports_bytes_environ的值为True时,os.environb和os.getenvb才可用。>>> # windows平台 >>> os.supports_bytes_environ False >>> os.getenvb Traceback (most recent call last):File "<stdin>", line 1, in <module> AttributeError: module 'os' has no attribute 'getenvb'. Did you mean: 'getenv'? 
1.2 修改环境变量
os.putenv(key, value)设置环境变量key的值为value。os.unsetenv(key)删除名为key的环境变量。
os.putenv和os.unsetenv对环境变量进行设置和删除会影响后续由os.system()、os.fork()``os.popen()``os.execv()发起的子进程。
 这两个方法都不会影响os.environ的值。所以最好通过给os.environ赋值或删除其中元素来修改环境变量。赋值时会自动调用os.putenv(),删除元素时会调用os.unsetenv()。
2 进程的用户和组
下述的方法大多仅在Unix系统可用。
 os.getlogin()、os.getpid()、os.getppid()三个方法在Windows平台也可以用。
2.1 进程的ID
os.getpid()返回当前进程IDos.getppid()返回父进程ID。os.getsid(pid)调用系统调用getsid:返回进程的会话ID。pid为0时,返回当前进程的会话IDos.setsid()调用系统调用setsid:创建会话并设置进程组ID。成功后,返回新会话的ID。
>>> os.getpid()
31044
>>> os.getppid()
30996
>>> os.getsid(0)
30996
 
2.2 进程的用户
os.getuid()返回当前进程的真实用户ID。os.geteuid()返回当前进程的有效用户ID。os.getresuid()返回由(ruid, euid, suid)组成的元组,分别表示当前进程的真实用户ID、有效用户ID和暂存用户ID。os.getlogin()返回通过控制终端进行登录的用户名。
>>> os.getuid()
0
>>> os.geteuid()
0
>>> os.getresuid()
(0, 0, 0)
>>> os.getlogin()
'root'
 
os.setuid(uid)设置当前进程的真实用户ID。os.seteuid(euid)设置当前进程的有效用户ID。os.setreuid(ruid, euid)设置当前进程的真实和有效用户ID。os.setresuid(ruid, euid, suid)设置当前进程的真实、有效和暂存用户ID。
2.3 进程组
os.getgid()返回当前进程的实际组ID。os.getegid()返回当前进程的有效组ID。os.getresgid()返回由(rgid, egid, ugid)组成的元组,分别表示当前进程的真实组ID、有效组ID和暂存组ID。os.getpgrp()返回当前进程组的ID。os.getpgid(pid)根据进程id返回进程的组ID列表。pid为0时,返回当前进程的进程组ID列表。os.getgroups()返回当前进程关联的附加组ID列表。os.getgrouplist(user, group)返回user所属的组ID列表。如果group不在列表内,会被加入列表。
>>> os.getgid()
0
>>> os.getegid()
0
>>> os.getresgid()
(0, 0, 0)
>>> os.getgrouplist('root', 0)
[0]
>>> os.getgroups()
[0]
>>> os.getpgid(os.getpid())
31044
>>> os.getpgrp()
31044
 
os.setgid(gid)设置当前进程的组ID。os.setegid(egid)设置当前进程的有效组ID。os.setregid(rgid, egid)设置当前进程的真实和有效组ID。os.setresgid(rgid, egid, sgid)设置当前进程的真实、有效和暂存组ID。os.setgroups(groups)把group参数值设置为与当前进程关联的附加组ID列表,group参数为序列,每个元素为每个组的ID数值。仅超级用户可执行该操作。os.setpgid(pid, pgrp)系统调用setpgid()把pid对应的进程的组ID设置为pgrp。os.setpgrp()系统调用setpgrp()或setpgrp(0, 0)。os.initgroups(username, gid)调用系统initgroups(),使用指定用户所在的所有值来初始化组访问列表,包括指定的组ID。
以上是os模块的访问和修改环境变量、进程用户、进程组的方法。