文章目录
- 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模块的访问和修改环境变量、进程用户、进程组的方法。