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 注意事项
-
可移植性:os模块的函数通常是跨平台的,但某些函数可能在某些操作系统上不可用或行为不同。编写代码时,应注意检查函数在不同平台上的行为和兼容性。
-
避免直接使用os模块进行文件读写:对于文件的读写操作,通常推荐使用Python内置的
open()
函数,而不是直接使用os模块。open()
函数提供了更灵活和强大的文件操作功能。 -
小心处理环境变量:修改环境变量可能会影响到程序的行为和其他依赖环境变量的进程。在修改环境变量时,应确保了解其影响,并在程序结束时恢复其原始值。
-
谨慎使用
os.system()
:os.system()
函数会调用系统的shell来执行命令,这可能会带来安全风险,特别是当命令字符串由用户输入时。在使用os.system()
时,应确保输入的命令是安全的,或者使用其他更安全的方法来执行系统命令。 -
避免使用
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 aii 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 的连续子数组,并将该连续子数组的长度与之前找到的子数组长度相比较࿰…...
MACOS/LINUX/WINDOWS C++ 获取当前可执行程序的完整路径
依赖本人写的多平台编译器宏判断: C/C MACOS、Windows、Linux、HarmonyOS 平台宏判断-CSDN博客 MACOS头文件依赖: #if defined(_MACOS) #include <libproc.h> #endif #include <mach-o/dyld.h> 只需要链接 libSystem.dylib 就行了&#…...

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

关于高德地图及其APP获取地图数据的研究
刚过完春节没几天,有个客户提出要获取高德地图的数据。 我看了下,回复说:这不是很简单嘛,高德有公开的开放平台,有足够的API支持用户获取数据,开发自己基于高德数据库的应用。 客户回复说:他的要…...
【Python入门教程】Python实现鸡兔同笼
今天跟大家分享一下很久之前自己做的鸡兔同笼求解问题的小游戏,使用公式和基本的判断语句即可实现,可以用来当练手或者消磨时间用。 大家在编代码的时候最重要就是先理清逻辑思路,例如应该套几层循环、分几个模块等等。然后在编码时可以先随意…...

微信小程序,h5端自适应登陆方式
微信小程序端只显示登陆(获取opid),h5端显示通过账户密码登陆 例如: 通过下面的变量控制: const isWeixin ref(false); // #ifdef MP-WEIXIN isWeixin.value true; // #endif...
物体检测-系列教程20:YOLOV5 源码解析10 (Model类前向传播、forward_once函数、_initialize_biases函数)
😎😎😎物体检测-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 14、Model类 14.2 前向传播 def forward(self, x, augmentFalse, profileFalse):if augm…...

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

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

JavaScript进阶-高阶技巧
文章目录 高阶技巧深浅拷贝浅拷贝深拷贝 异常处理throw抛异常try/caych捕获异常debugger 处理thisthis指向改变this 性能优化防抖节流 高阶技巧 深浅拷贝 只针对引用类型 浅拷贝 拷贝对象后,里面的属性值是简单数据类型直接拷贝值,如果属性值是引用数…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...