当前位置: 首页 > 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模块的访问和修改环境变量、进程用户、进程组的方法。

相关文章:

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

文章目录 1 访问和修改环境变量1.1 访问环境变量1.2 修改环境变量 2 进程的用户和组2.1 进程的ID2.2 进程的用户2.3 进程组 os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面。 这里整理了环境变量、进程的用户和用户组相关的控制方法。 参考…...

QT 通过ODBC连接数据库的好方法:

效果图&#xff1a; PWD使用自己的&#xff0c;我的这是自己的&#xff0c;所以你用不了。 以下是格式。 // 1. 设置数据库连接 QSqlDatabase db QSqlDatabase::addDatabase("QODBC");// 建立和QMYSQL数据库的连接 // 设置数据库连接名称&#xff08;DSN&am…...

机器学习 - 初学者需要弄懂的一些线性代数的概念

一、单位矩阵 在数学中&#xff0c;单位矩阵是一个方阵&#xff0c;其主对角线上的元素全为1&#xff0c;其余元素全为0。单位矩阵在矩阵乘法中起到类似于数字1在数值乘法中的作用&#xff0c;即任何矩阵与单位矩阵相乘&#xff0c;结果仍为原矩阵本身。 单位矩阵的定义&…...

WordPress event-monster插件存在信息泄露漏洞(CVE-2024-11396)

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

ESP32 I2S音频总线学习笔记(二):I2S读取INMP441音频数据

简介 在这个系列的上一篇文章中&#xff0c;我们介绍了ESP32 I2S音频总线的相关知识&#xff0c;简要了解了什么是I2S总线、它的通信格式&#xff0c;以及相关的底层API函数。没有看过上篇文章的可以点击文章进行回顾&#xff1a; ESP32 I2S音频总线学习笔记&#xff08;一&a…...

本地大模型编程实战(03)语义检索(2)

文章目录 准备按批次嵌入加载csv文件&#xff0c;分割文档并嵌入测试嵌入效果总结代码 上一篇文章&#xff1a; 本地大模型编程实战(02)语义检索(1) 详细介绍了如何使用 langchain 实现语义检索&#xff0c;为了演示方便&#xff0c;使用的是 langchain 提供的内存数据库。 在实…...

LabVIEW橡胶动态特性测试系统

本文介绍了一个利用LabVIEW软件和NI高速数据采集设备构建的橡胶动态特性测试系统。该系统实现了橡胶材料动态性能的精确测量&#xff0c;并通过虚拟仪器技术&#xff0c;提高了测试数据的处理效率和准确性。系统支持实时数据处理和多种信号的动态分析&#xff0c;适用于工业和科…...

SpringBoot开发(二)Spring Boot项目构建、Bootstrap基础知识

1. Spring Boot项目构建 1.1. 简介 基于官方网站https://start.spring.io进行项目的创建. 1.1.1. 简介 Spring Boot是基于Spring4框架开发的全新框架&#xff0c;设计目的是简化搭建及开发过程&#xff0c;并不是对Spring功能上的增强&#xff0c;而是提供了一种快速使用Spr…...

使用 Vue 3 的 watchEffect 和 watch 进行响应式监视

Vue 3 的 Composition API 引入了 <script setup> 语法&#xff0c;这是一种更简洁、更直观的方式来编写组件逻辑。结合 watchEffect 和 watch&#xff0c;我们可以轻松地监视响应式数据的变化。本文将介绍如何使用 <script setup> 语法结合 watchEffect 和 watch&…...

Vue.js 高级组件开发

Vue.js 高级组件开发&#xff1a;构建一个智能动态表单生成器 ——从可复用架构到性能优化的全链路实践 引言&#xff1a;为什么需要高级组件&#xff1f; 在现代前端开发中&#xff0c;组件不仅是UI的封装&#xff0c;更是业务逻辑的载体。一个“高级”Vue组件应当具备&…...

React应用深度优化与调试实战指南

一、渲染性能优化进阶 1.1 精细化渲染控制 typescript 复制 // components/HeavyComponent.tsx import React, { memo, useMemo } from react;interface Item {id: string;complexData: {// 复杂嵌套结构}; }const HeavyComponent memo(({ items }: { items: Item[] }) &g…...

Linux 内核学习(4) --- devfreq 动态调频框架

目录 Linux devfreq 简介核心数据结构devfreq_dev_profile 结构体devfreq_governor 结构体devfreq 结构体 工作流程devFreq framework 初始化governor 初始化devfreq Device 注册动态变频的实现device_unregister 流程 用户空间节点参考文章 Linux devfreq 简介 现在的 Soc 由…...

Spring Boot 无缝集成SpringAI的函数调用模块

这是一个 完整的 Spring AI 函数调用实例&#xff0c;涵盖从函数定义、注册到实际调用的全流程&#xff0c;以「天气查询」功能为例&#xff0c;结合代码详细说明&#xff1a; 1. 环境准备 1.1 添加依赖 <!-- Spring AI OpenAI --> <dependency><groupId>o…...

Ansible自动化运维实战--yaml的使用和配置(7/8)

文章目录 一、YAML 基本语法1.1. 缩进1.2. 注释1.3. 列表1.4. 字典 二、Ansible 中 YAML 的应用2.1. Ansible 剧本&#xff08;Playbooks&#xff09;2.2. 变量定义2.3. 角色&#xff08;Roles&#xff09;2.4. Inventory 文件2.5. 数据类型2.6. 引用变量 在 Ansible 里&#x…...

kamailio-5.8.4-centos9编译

安装必要的依赖包 在开始编译之前&#xff0c;你需要安装编译 Kamailio 所需的一些基础依赖包&#xff1a; dnf install -y make gcc gcc-c flex bison libxml2-devel openssl-devel sqlite-devel mysql-devel pcre-devel libcurl-devel下载并解压 Kamailio 源码包 假设你已经…...

单例模式 - 单例模式的实现与应用

引言 单例模式&#xff08;Singleton Pattern&#xff09;是设计模式中最简单且最常用的模式之一。它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。单例模式常用于需要全局唯一对象的场景&#xff0c;如配置管理、日志记录、线程池等。 本文将详细介…...

hadoop==docker desktop搭建hadoop

hdfs map readuce yarn https://medium.com/guillermovc/setting-up-hadoop-with-docker-and-using-mapreduce-framework-c1cd125d4f7b 清理资源 docker-compose down docker system prune -f...

zookeeper的介绍和简单使用

1 zookerper介绍 zookeeper是一个开源的分布式协调服务&#xff0c;由Apache软件基金会提供&#xff0c;主要用于解决分布式应用中的数据管理、状态同步和集群协调等问题。通过提供一个高性能、高可用的协调服务&#xff0c;帮助构建可靠的分布式系统。 Zookeeper的特点和功能…...

DiffuEraser: 一种基于扩散模型的视频修复技术

视频修复算法结合了基于流的像素传播与基于Transformer的生成方法&#xff0c;利用光流信息和相邻帧的信息来恢复纹理和对象&#xff0c;同时通过视觉Transformer完成被遮挡区域的修复。然而&#xff0c;这些方法在处理大范围遮挡时常常会遇到模糊和时序不一致的问题&#xff0…...

CentOS/Linux Python 2.7 离线安装 Requests 库解决离线安装问题。

root@mwcollector1 externalscripts]# cat /etc/os-release NAME=“Kylin Linux Advanced Server” VERSION=“V10 (Sword)” ID=“kylin” VERSION_ID=“V10” PRETTY_NAME=“Kylin Linux Advanced Server V10 (Sword)” ANSI_COLOR=“0;31” 这是我系统的版本,由于是公司内网…...

World of Warcraft [CLASSIC] Jewelcrafting Gemstone 2

World of Warcraft [CLASSIC] Jewelcrafting & Gemstone 2 珠宝加工与常用宝石列表&#xff08;紫色史诗级&#xff09;&#xff1a; World of Warcraft [CLASSIC] Jewelcrafting & Gemstone_wlk宝石属性一览表-CSDN博客...

AI刷题-最小化团建熟悉程度和

目录 问题描述 输入格式 输出格式 解题思路&#xff1a; 状态表示 状态转移 动态规划数组 预处理 实现&#xff1a; 1.初始化&#xff1a; 2.动态规划部分&#xff1a; &#xff08;1&#xff09;对于已分组状态的&#xff0c;跳过&#xff1a; &#xff08;2&…...

一文详解Filter类源码和应用

背景 在日常开发中&#xff0c;经常会有需要统一对请求做一些处理&#xff0c;常见的比如记录日志、权限安全控制、响应处理等。此时&#xff0c;ServletApi中的Filter类&#xff0c;就可以很方便的实现上述效果。 Filter类 是一个接口&#xff0c;属于 Java Servlet API 的一部…...

应用层协议 HTTP 讲解实战:从0实现HTTP 服务器

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; HTTP 协议 &#x1f98b; 认识 URL&#x1f98b; urlencode 和 urldecode 二&#xff1a;&#x1f525; HTTP 协议请求与响应格式 &#x1f98b; HTTP 请求…...

DDD-全面理解领域驱动设计中的各种“域”

一、DDD-领域 在领域驱动设计&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;中&#xff0c;**领域&#xff08;Domain&#xff09;**指的是软件系统所要解决的特定业务问题的范围。它涵盖了业务知识、规则和逻辑&#xff0c;是开发团队与领域专家共同关注的核心…...

PHP防伪溯源一体化管理系统小程序

&#x1f50d; 防伪溯源一体化管理系统&#xff0c;品质之光&#xff0c;根源之锁 &#x1f680; 引领防伪技术革命&#xff0c;重塑品牌信任基石 我们自豪地站在防伪技术的前沿&#xff0c;为您呈现基于ThinkPHP和Uniapp精心锻造的多平台&#xff08;微信小程序、H5网页&…...

纯css实现div宽度可调整

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>纯css实现div尺寸可调整</title><style…...

C# 中使用Hash用于密码加密

通过一定的哈希算法&#xff08;典型的有MD5&#xff0c;SHA-1等&#xff09;&#xff0c;将一段较长的数据映射为较短小的数据&#xff0c;这段小数据就是大数据的哈希值。他最大的特点就是唯一性&#xff0c;一旦大数据发生了变化&#xff0c;哪怕是一个微小的变化&#xff0…...

如何建设一个企业级的数据湖

建设一个企业级的数据湖是一项复杂且系统化的工程&#xff0c;需要从需求分析、技术选型、架构设计到实施运维等多个方面进行综合规划和实施。以下是基于我搜索到的资料&#xff0c;详细阐述如何建设企业级数据湖的步骤和关键要点&#xff1a; 一、需求分析与规划 明确业务需…...

目标跟踪之sort算法(3)

这里写目录标题 1 流程1 预处理2 跟踪 2 代码 参考&#xff1a;sort代码 https://github.com/abewley/sort 1 流程 1 预处理 1.1 获取离线检测数据。1.2 实例化跟踪器。2 跟踪 2.1 轨迹处理。根据上一帧的轨迹预测当前帧的轨迹&#xff0c;剔除到当前轨迹中为空的轨迹得到当前…...