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

Python 进阶语法:os

3.1.1  文件和目录操作
  • os.getcwd(): 获取当前工作目录的路径。
import os# 获取当前工作目录
current_directory = os.getcwd()
print("当前工作目录是:", current_directory)
  • os.chdir(path): 改变当前工作目录到指定的路径。
import os# 改变当前工作目录
os.chdir('G:/WYPYTHON/PY-AGIN/1.Python基础入门/15.文件操作/test')# 再次获取当前工作目录以确认改变
new_directory = os.getcwd()
print("新的工作目录是:", new_directory)
  • os.listdir(path): 列出指定目录下的所有文件和子目录名。
import os# 列出指定目录下的所有文件和子目录
files_and_directories = os.listdir('G:/WYPYTHON/PY-AGIN/1.Python基础入门')
print("目录下的文件和子目录:", files_and_directories)# 返回结果是一个列表
# 目录下的文件和子目录: ['1.1.快速上手', '1.2.数据结构', '1.计算小组赛的得分.py']
  • os.mkdir(name): 创建新目录。
# 创建新目录
os.mkdir(new_directory_path)# 检查新目录是否存在
if os.path.exists('G:/WYPYTHON/PY-AGIN/1.Python基础入门/16.标准库/1.os模块/new_directory'):print("新目录已创建.")
else:print("创建目录失败.")
  • os.rmdir(name): 删除空目录。
import os# 删除空目录
os.rmdir('G:/WYPYTHON/PY-AGIN/1.Python基础入门/16.标准库/1.os模块/new_directory')# 检查目录是否已被删除
if not os.path.exists('G:/WYPYTHON/PY-AGIN/1.Python基础入门/16.标准库/1.os模块/new_directory'):print("空目录已被删除.")
else:print("删除目录失败.")
  • os.remove(path): 删除文件。
import os# 删除文件
os.remove('G:/WYPYTHON\PY-AGIN/1.Python基础入门/15.文件操作/wuyan.txt')# 检查文件是否已被删除
if not os.path.exists('G:/WYPYTHON\PY-AGIN/1.Python基础入门/15.文件操作/wuyan.txt'):print("文件已被删除.")
else:print("删除文件失败.")
  • os.path:os模块的子模块,提供了用于处理文件路径的函数,如os.path.exists(path)检查路径是否存在,os.path.join(path1, path2)连接多个路径名组件等。
import os# 检查路径是否存在
if os.path.exists('G:/WYPYTHON/PY-AGIN/1.Python基础入门/16.标准库/1.os模块/6.删除文件.py'):print("文件路径存在.")
else:print("文件路径不存在.")# 连接多个路径名组件
full_path = os.path.join('G:/WYPYTHON/PY-AGIN/1.Python基础入门/16.标准库', '1.os模块', '6.删除文件.py')
print("完整的文件路径是:", full_path)
3.1.2  环境变量

环境变量是操作系统中存储配置信息的一种方式,它们可以被运行在系统上的任何程序访问。Python的os模块提供了访问和修改这些环境变量的接口。以下是如何使用os.environ来读取和修改环境变量的例子:

  • os.environ: 一个字典对象,表示环境变量。可以读取和修改环境变量的值。
  • os.environ.get(key): 获取环境变量的值。
import os# 读取名为"PATH"的环境变量的值  
path = os.environ.get('PATH')
print("PATH 环境变量的值:", path)# 读取名为"HOME"的环境变量的值,如果它不存在则返回一个默认值  
home = os.environ.get('HOME', 'Default Home Directory')
print("HOME 环境变量的值或默认值:", home)
  • os.environ.set(key, value): 设置环境变量的值。
import os  # 获取当前PATH环境变量的值  
current_path = os.environ.get('PATH')  # 在当前PATH环境变量的值前添加一个新的路径  
new_path = 'C:\\NewDirectory\\bin;' + current_path  # 设置新的PATH环境变量  
os.environ['PATH'] = new_path  # 验证新的PATH环境变量  
updated_path = os.environ.get('PATH')  
print("更新后的PATH 环境变量的值:", updated_path)

请注意,使用os.environ['key'] = value来设置环境变量通常只会影响当前Python进程及其子进程的环境变量。它不会改变操作系统级别的环境变量,也就是说,当Python进程结束后,这些更改不会持续存在。

此外,对于os.environ.set(key, value),实际上在Python的标准库中并没有这个方法。通常我们使用os.environ['key'] = value来设置环境变量。如果你看到os.environ.set(key, value),它可能是某个特定环境或第三方库提供的方法,而不是Python标准库的一部分。

如果你想永久地修改操作系统的环境变量,你需要通过操作系统的特定方式来设置,这通常涉及到编辑配置文件(如Windows上的系统属性,Linux上的.bashrc.bash_profile等)或使用特定的命令行工具。

 3.1.3  进程管理
  • os.getpid(): 获取当前进程的进程ID。os.getpid() 是一个函数,用于获取当前进程的进程ID(PID)。这个PID是一个唯一的整数,用于在操作系统中标识进程。
# 获取当前进程的进程ID
current_pid = os.getpid()
print(f"当前进程的PID是: {current_pid}")
  • os.kill(pid, signal): 向指定进程发送信号。
import os
import signal
import time# 获取当前进程的进程ID
current_pid = os.getpid()
print(f'当前进程的PID是: {current_pid}')# 定义一个函数,用于接收SIGTERM信号并优雅地终止
def handle_termination(signal, frame):print("接收到SIGTERM信号,开始退出...")# 可以在这里执行清理工作,如关闭文件、断开数据库连接等exit(0)# 注册信号处理函数
signal.signal(signal.SIGTERM, handle_termination)# 等待一段时间,以便观察进程
time.sleep(5)# 现在,我们假设另一个进程或脚本想要终止当前进程
# 我们可以使用os.kill来发送SIGTERM信号
os.kill(current_pid, signal.SIGTERM)

在上面的例子中,我们首先获取了当前进程的PID,并打印出来。然后,我们定义了一个处理函数handle_termination,它将在接收到SIGTERM信号时被调用。我们使用signal.signal()函数注册了这个处理函数,以便在接收到SIGTERM信号时能够优雅地终止进程。

接下来,我们让进程休眠5秒钟,以便有足够的时间观察其行为。最后,我们使用os.kill()函数向当前进程发送了一个SIGTERM信号。由于我们已经注册了信号处理函数,因此当信号到达时,handle_termination函数将被调用,并打印出一条消息,然后进程将退出。

请注意,在实际应用中,通常不会在同一脚本中使用os.kill()来杀死自己,因为这样做没有太大的意义。上面的例子仅用于演示如何使用os.kill()函数。在实际应用中,你可能会使用os.kill()来发送信号给其他进程,例如,你可能想要终止一个由你的程序启动的子进程。

 3.1.4  执行系统命令

  • os.system(command): 执行系统命令并返回命令的退出状态。

os.system() 函数用于执行传递给它的字符串参数作为系统命令,并返回命令的退出状态。退出状态是一个整数,通常,如果命令成功执行,则返回 0,否则返回非零值。

  • os.execv(path, args): 执行新的程序,替换当前进程。

os.execv() 函数用于执行一个新的程序,它会替换当前进程的映像。这意味着调用 os.execv() 后,当前进程将不再执行 Python 代码,而是开始执行新程序。os.execv() 需要两个参数:新程序的路径和一个参数列表(以列表形式提供)。

3.1.5  注意事项
  1. 可移植性:os模块的函数通常是跨平台的,但某些函数可能在某些操作系统上不可用或行为不同。编写代码时,应注意检查函数在不同平台上的行为和兼容性。

  2. 避免直接使用os模块进行文件读写:对于文件的读写操作,通常推荐使用Python内置的open()函数,而不是直接使用os模块。open()函数提供了更灵活和强大的文件操作功能。

  3. 小心处理环境变量:修改环境变量可能会影响到程序的行为和其他依赖环境变量的进程。在修改环境变量时,应确保了解其影响,并在程序结束时恢复其原始值。

  4. 谨慎使用os.system()os.system()函数会调用系统的shell来执行命令,这可能会带来安全风险,特别是当命令字符串由用户输入时。在使用os.system()时,应确保输入的命令是安全的,或者使用其他更安全的方法来执行系统命令。

  5. 避免使用from os import *:这样做会将os模块的所有内容导入到当前命名空间中,可能导致命名冲突和不可预见的行为。建议使用import os并显式地调用os模块的函数,以提高代码的可读性和可维护性。

总之,os模块提供了与操作系统交互的强大功能,但在使用时应注意跨平台兼容性、安全性以及代码的可读性和可维护性。

相关文章:

Python 进阶语法:os

3.1.1 文件和目录操作 os.getcwd(): 获取当前工作目录的路径。 import os# 获取当前工作目录 current_directory os.getcwd() print("当前工作目录是:", current_directory) os.chdir(path): 改变当前工作目录到指定的路径。 import os# 改变当前工作目录 os.c…...

测试需求平台9-Table 组件应用产品列表优化

✍此系列为整理分享已完结入门搭建《TPM提测平台》系列的迭代版,拥抱Vue3.0将前端框架替换成字节最新开源的arco.design,其中约60%重构和20%新增内容,定位为从 0-1手把手实现简单的测试平台开发教程,内容将囊括基础、扩展和实战&a…...

targetSdkVersion > 30 如何将下载的网络视频 保存到手机相册里更新

在 targetSdkVersion 31 中,将下载的网络视频保存到手机相册中涉及几个关键步骤。由于 Android 12(API 级别 31)引入了更多的隐私和安全限制,特别是作用域存储(Scoped Storage),因此你需要遵循这…...

C#,无监督的K-Medoid聚类算法(K-Medoid Algorithm)与源代码

1 K-Medoid算法 K-Medoid(也称为围绕Medoid的划分)算法是由Kaufman和Rousseeuw于1987年提出的。中间点可以定义为簇中的点,其与簇中所有其他点的相似度最小。 K-medoids聚类是一种无监督的聚类算法,它对未标记数据中的对象进行聚…...

宏定义中#与##的注意事项

1. #是字符串化操作符。它的作用是将宏参数转换成字符串 2. ##是标记粘贴操作符。它的作用是将两个标记连接起来形成一个新的标记 #define TEST1(a) #a #define TEST2(a) b##a/***********************************************************/ 举例:TEST1(hello) 会…...

Java函数式编程

Java函数式编程 Java函数式编程(Functional Programming in Java)是指使用函数式编程范式来编写Java代码的一种编程方式。函数式编程是一种编程范式,它强调使用函数作为基本构建块,并将计算视为数学上的函数求值,避免…...

【深度优先搜索】【树】【C++算法】2003. 每棵子树内缺失的最小基因值

作者推荐 动态规划的时间复杂度优化 本文涉及知识点 深度优先搜索 LeetCode2003. 每棵子树内缺失的最小基因值 有一棵根节点为 0 的 家族树 ,总共包含 n 个节点,节点编号为 0 到 n - 1 。给你一个下标从 0 开始的整数数组 parents ,其中…...

电脑开机显示器没有信号而且键盘鼠标不亮怎么解决?

大家在使用电脑的过程,开机没有反应是比较经常遇到的问题,就有用户反映说自己的电脑启动之后,显示器无信号,键盘鼠标灯也不亮,怎么操作都没有效果。对开机有影响的硬件主要是内存条,内存条是非常容易松动的,而且金手指如果氧化了,都会导致开不了机 大家在使用电脑的过程…...

RLWE同态加密编码打包——系数打包

RLWE同态加密的明文域 RLWE的加密方案,如BGV、BFV,加密的对象,实际上是分圆多项式环上的一个整系数多项式。而我们在平时接触到的需要加密的数据,如图像或者工资,通常是一个数。所以,在使用RLWE同态加密时…...

Codeforces Round 930 (Div. 2 ABCDEF题) 视频讲解

A. Shuffle Party Problem Statement You are given an array a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,an​. Initially, a i i a_ii ai​i for each 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n. The operation swap ( k ) \texttt{swap}(k) swap(k) for an…...

【LeetCode-中等】209.长度最小的子数组-双指针/滑动窗口

力扣题目链接 1. 暴力解法 这道题的暴力解法是两层嵌套for循环,第一层循环从 i 0 开始遍历至数组末尾,第二层循环从 j i 开始遍历至找到总和大于等于 target 的连续子数组,并将该连续子数组的长度与之前找到的子数组长度相比较&#xff0…...

MACOS/LINUX/WINDOWS C++ 获取当前可执行程序的完整路径

依赖本人写的多平台编译器宏判断&#xff1a; C/C MACOS、Windows、Linux、HarmonyOS 平台宏判断-CSDN博客 MACOS头文件依赖&#xff1a; #if defined(_MACOS) #include <libproc.h> #endif #include <mach-o/dyld.h> 只需要链接 libSystem.dylib 就行了&#…...

【Nginx笔记02】通过Nginx服务器转发客户端的WebSocket接口到后端服务

这篇文章&#xff0c;主要介绍如何通过Nginx服务器转发客户端的WebSocket接口到后端服务【知识星球】。 目录 一、Nginx配置WebSocket 1.1、Nginx配置内容 1.2、客户端请求地址 1.3、创建WebSocket测试工程 1.4、启动测试 1.5、WebSocket超时问题 1.5.1、设置超时时间 …...

关于高德地图及其APP获取地图数据的研究

刚过完春节没几天&#xff0c;有个客户提出要获取高德地图的数据。 我看了下&#xff0c;回复说&#xff1a;这不是很简单嘛&#xff0c;高德有公开的开放平台&#xff0c;有足够的API支持用户获取数据&#xff0c;开发自己基于高德数据库的应用。 客户回复说&#xff1a;他的要…...

【Python入门教程】Python实现鸡兔同笼

今天跟大家分享一下很久之前自己做的鸡兔同笼求解问题的小游戏&#xff0c;使用公式和基本的判断语句即可实现&#xff0c;可以用来当练手或者消磨时间用。 大家在编代码的时候最重要就是先理清逻辑思路&#xff0c;例如应该套几层循环、分几个模块等等。然后在编码时可以先随意…...

微信小程序,h5端自适应登陆方式

微信小程序端只显示登陆(获取opid),h5端显示通过账户密码登陆 例如: 通过下面的变量控制: const isWeixin ref(false); // #ifdef MP-WEIXIN isWeixin.value true; // #endif...

物体检测-系列教程20:YOLOV5 源码解析10 (Model类前向传播、forward_once函数、_initialize_biases函数)

&#x1f60e;&#x1f60e;&#x1f60e;物体检测-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 14、Model类 14.2 前向传播 def forward(self, x, augmentFalse, profileFalse):if augm…...

贪吃蛇(C语言)步骤讲解

一&#xff1a;文章大概 使用C语言在windows环境的控制台中模拟实现经典小游戏 实现基本功能&#xff1a; 1.贪吃蛇地图绘制 2.蛇吃食物的功能&#xff08;上&#xff0c;下&#xff0c;左&#xff0c;右方向控制蛇的动作&#xff09; 3.蛇撞墙死亡 4.计算得分 5.蛇身加…...

MySQL 数据库表设计和优化

一、数据结构设计 正确的数据结构设计对数据库的性能是非常重要的。 在设计数据表时&#xff0c;尽量遵循一下几点&#xff1a; 将数据分解为合适的表&#xff0c;每个表都应该有清晰定义的目的&#xff0c;避免将过多的数据存储在单个表中。使用适当的数据类型来存储数据&…...

JavaScript进阶-高阶技巧

文章目录 高阶技巧深浅拷贝浅拷贝深拷贝 异常处理throw抛异常try/caych捕获异常debugger 处理thisthis指向改变this 性能优化防抖节流 高阶技巧 深浅拷贝 只针对引用类型 浅拷贝 拷贝对象后&#xff0c;里面的属性值是简单数据类型直接拷贝值&#xff0c;如果属性值是引用数…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...