当前位置: 首页 > news >正文

Python标准库 - os (1) 环境变量、进程的用户和组

文章目录

  • 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.environbos.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.environbos.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.putenvos.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() 返回当前进程ID
  • os.getppid() 返回父进程ID。
  • os.getsid(pid) 调用系统调用getsid:返回进程的会话ID。pid为0时,返回当前进程的会话ID
  • os.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模块的访问和修改环境变量、进程用户、进程组的方法。

http://www.lryc.cn/news/527312.html

相关文章:

  • QT 通过ODBC连接数据库的好方法:
  • 机器学习 - 初学者需要弄懂的一些线性代数的概念
  • WordPress event-monster插件存在信息泄露漏洞(CVE-2024-11396)
  • ESP32 I2S音频总线学习笔记(二):I2S读取INMP441音频数据
  • 本地大模型编程实战(03)语义检索(2)
  • LabVIEW橡胶动态特性测试系统
  • SpringBoot开发(二)Spring Boot项目构建、Bootstrap基础知识
  • 使用 Vue 3 的 watchEffect 和 watch 进行响应式监视
  • Vue.js 高级组件开发
  • React应用深度优化与调试实战指南
  • Linux 内核学习(4) --- devfreq 动态调频框架
  • Spring Boot 无缝集成SpringAI的函数调用模块
  • Ansible自动化运维实战--yaml的使用和配置(7/8)
  • kamailio-5.8.4-centos9编译
  • 单例模式 - 单例模式的实现与应用
  • hadoop==docker desktop搭建hadoop
  • zookeeper的介绍和简单使用
  • DiffuEraser: 一种基于扩散模型的视频修复技术
  • CentOS/Linux Python 2.7 离线安装 Requests 库解决离线安装问题。
  • World of Warcraft [CLASSIC] Jewelcrafting Gemstone 2
  • AI刷题-最小化团建熟悉程度和
  • 一文详解Filter类源码和应用
  • 应用层协议 HTTP 讲解实战:从0实现HTTP 服务器
  • DDD-全面理解领域驱动设计中的各种“域”
  • PHP防伪溯源一体化管理系统小程序
  • 纯css实现div宽度可调整
  • C# 中使用Hash用于密码加密
  • 如何建设一个企业级的数据湖
  • 目标跟踪之sort算法(3)
  • 【java数据结构】HashMapOJ练习题