当前位置: 首页 > 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” 这是我系统的版本,由于是公司内网…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

Linux入门课的思维导图

耗时两周&#xff0c;终于把慕课网上的Linux的基础入门课实操、总结完了&#xff01; 第一次以Blog的形式做学习记录&#xff0c;过程很有意思&#xff0c;但也很耗时。 课程时长5h&#xff0c;涉及到很多专有名词&#xff0c;要去逐个查找&#xff0c;以前接触过的概念因为时…...

Vue 实例的数据对象详解

Vue 实例的数据对象详解 在 Vue 中,数据对象是响应式系统的核心,也是组件状态的载体。理解数据对象的原理和使用方式是成为 Vue 专家的关键一步。我将从多个维度深入剖析 Vue 实例的数据对象。 一、数据对象的定义方式 1. Options API 中的定义 在 Options API 中,使用 …...

Android Framework预装traceroute执行文件到system/bin下

文章目录 Android SDK中寻找traceroute代码内置traceroute到SDK中traceroute参数说明-I 参数&#xff08;使用 ICMP Echo 请求&#xff09;-T 参数&#xff08;使用 TCP SYN 包&#xff09; 相关文章 Android SDK中寻找traceroute代码 设备使用的是Android 11&#xff0c;在/s…...