【深入探索Python库】操作系统功能的接口OS库(2)

系列文章目录

深入探索Python库之操作系统功能的接口OS库(1)
深入探索Python库之操作系统功能的接口OS库(2)


文章目录

  • 系列文章目录
  • 引言
  • 系统信息
  • 进程管理
  • 结论


引言

前篇文章介绍了python库中os库的核心用途,包括文件管理、环境变量访问、进程管理等,这一篇我们接着介绍os库中常用的几个函数,并根据常用度和重要性进行了星级评定★,★ 越多则越重要,在日常代码中出现频率越高。

系统信息

  1. os.name: ★ ★ ★
    此方法返回一个字符串,表示正在运行的操作系统的名称。例如,对于UNIX系统,它通常返回'posix',对于Windows系统,返回'nt'。这个功能在编写跨平台代码时非常有用,因为你可以根据操作系统的类型来调整代码的行为。

    示例代码:

    os_name = os.name
    print(f"Operating system name: {os_name}")
    
  2. os.getcwd: ★ ★ ★ ★
    此方法返回当前Python脚本的工作目录的绝对路径。这非常有用,特别是当你需要获取当前脚本的位置或者基于当前目录构建相对路径时。

    示例代码:

     current_directory = os.getcwd()print(f"Current working directory: {current_directory}")
    
  3. os.path: 这是一个子模块,提供了一系列处理文件和目录路径的方法。

    • os.path.join: ★ ★ ★ ★ ★
      此方法用于连接两个或多个路径部分,正确处理不同操作系统中的路径分隔符问题。这在构建文件路径时非常有用,确保代码的跨平台兼容性。下面的代码是连接上面的当前目录的(current_directory)

      示例代码:

       joined_path = os.path.join(current_directory, "new_dir")print(f"Joined path: {joined_path}")
      
    • os.path.split: ★ ★ ★ ★ ★
      此方法用于分割路径为目录和文件名。这在你需要从完整路径中分离文件名或目录名时非常方便。

      示例代码:

       dir_name, file_name = os.path.split(joined_path)print(f"Directory: {dir_name}, File: {file_name}")
      
    • os.path.abspath(path): ★ ★ ★ ★ ★
      返回给定路径的绝对路径。这在确定文件或目录的完整路径时非常有用,尤其是在处理相对路径时。

      示例代码:

       absolute_path = os.path.abspath("example.txt")
      
    • os.path.dirname(path): ★ ★ ★ ★ ★
      返回文件路径的目录名。如果你需要从完整路径中分离出目录部分,这个函数很有用。

      示例代码:

       dir_name = os.path.dirname("/usr/bin/python3")
      
    • os.path.exists(path): ★ ★ ★ ★ ★
      检查指定的路径是否存在。这在验证文件或目录是否存在时经常用到。

      示例代码:

       path_exists = os.path.exists("/usr/bin/python3")
      
    • os.path.isfile(path): ★ ★ ★ ★ ★
      检查路径是否指向一个文件。这在验证路径是否指向一个实际的文件时很有用。

      示例代码:

       is_file = os.path.isfile("/usr/bin/python3")
      
    • os.path.isdir(path): ★ ★ ★ ★ ★
      检查路径是否指向一个目录。这在确定一个路径是否是目录时使用。

      示例代码:

       is_dir = os.path.isdir("/usr/bin")
      
    • os.path.split(path): ★ ★ ★ ★ ★
      将路径分割为目录和文件名。这在需要从路径中分离出目录和文件名时使用。
      示例代码:

       split_path = os.path.split("/usr/bin/python3")
      
    • os.path.splitext(path): ★ ★ ★ ★ ★
      分割路径的扩展名。这在需要从文件名中分离出文件扩展名时使用。
      示例代码:

       split_ext = os.path.splitext("/usr/bin/python3")
      
    • os.path.basename(path): ★ ★ ★ ★ ★
      从给定的路径中提取文件名。这在从完整路径中仅获取文件名时非常方便。
      示例代码:

      base_name = os.path.basename("/usr/bin/python3")
      
    • os.path.expanduser(path): ★ ★ ★
      展开路径中的"~"为用户目录。这在处理用户目录路径时非常方便。
      示例代码:

      expanded_user = os.path.expanduser("~")
      
    • os.path.commonpath(paths): ★ ★ ★
      返回一系列路径的公共前缀。当你有多个路径并想找到它们的共同根目录时,这个函数很有帮助。
      示例代码:

      common_path = os.path.commonpath(["/usr/bin/python3", "/usr/bin"])
      
    • os.path.commonprefix(list): ★ ★ ★
      返回列表中所有路径的最长公共子路径。这适用于寻找多个路径的共同前缀,但不一定是有效的路径。
      示例代码:

      common_prefix = os.path.commonprefix(["/usr/bin/python3", "/usr/bin"])
      
    • os.path.expandvars(path): ★ ★
      展开路径中的环境变量。这在处理包含环境变量的路径时非常有用。
      示例代码:

      expanded_vars = os.path.expandvars("$HOME")
      
    • os.path.getatime(path): ★ ★
      返回路径的最后访问时间。这可以用来获取文件或目录上次被访问的时间。
      示例代码:

      access_time = os.path.getatime("/usr/bin/python3")
      
    • os.path.getctime(path): ★ ★
      返回路径的创建时间。这在获取文件或目录的创建时间时使用。
      示例代码:

      create_time = os.path.getctime("/usr/bin/python3")
      
    • os.path.getmtime(path): ★ ★
      返回路径的最后修改时间。这在确定文件或目录最后一次修改的时间时非常有用。
      示例代码:

      modify_time = os.path.getmtime("/usr/bin/python3")
      
    • os.path.getsize(path): ★ ★
      返回路径文件的大小。这用于获取文件的大小,以字节为单位。
      示例代码:

      file_size = os.path.getsize("/usr/bin/python3")
      
    • os.path.isabs(path): ★ ★ ★
      检查路径是否为绝对路径。这在判断一个路径是否是绝对路径时使用。
      示例代码:

      is_absolute = os.path.isabs("/usr/bin/python3")
      
    • os.path.islink(path): ★ ★ ★
      检查路径是否指向一个符号链接。这在识别符号链接时有用。
      示例代码:

      is_link = os.path.islink("/usr/bin/python")
      
    • os.path.ismount(path): ★ ★
      检查路径是否为挂载点。这在确定路径是否是文件系统挂载点时使用。
      示例代码:

      is_mount = os.path.ismount("/")
      
    • os.path.normcase(path): ★ ★ ★
      规范化路径的大小写。这在处理大小写敏感的文件系统时非常有用。
      示例代码:

      norm_case = os.path.normcase("/usr/BIN/Python3")
      
    • os.path.normpath(path): ★ ★ ★
      规范化路径,合并多余的分隔符和上级引用。这在清理和规范化路径时非常有用。
      示例代码:

      norm_path = os.path.normpath("/usr//bin/../bin/python3")
      
    • os.path.realpath(path): ★ ★ ★ ★
      返回路径的真实路径,解析符号链接。这在获取文件的实际路径(解析符号链接之后的路径)时使用。
      示例代码:

      real_path = os.path.realpath("/usr/bin/python")
      
    • os.path.relpath(path[, start]): ★ ★ ★
      从start目录到path的相对路径。这在计算从一个目录到另一个目录的相对路径时使用。
      示例代码:

      relative_path = os.path.relpath("/usr/bin/python3", "/usr")
      
    • os.path.samefile(path1, path2): ★ ★
      检查两个路径是否指向同一个文件。这在确定两个路径是否引用同一个文件时使用。
      示例代码:

            # 示例代码需要两个实际存在的文件路径
      
    • os.path.sameopenfile(fp1, fp2): ★ ★
      检查两个打开的文件对象是否指向同一个文件。这在比较文件对象时使用。
      示例代码:

       # 示例代码需要打开的文件对象
      
    • os.path.samestat(stat1, stat2): ★ ★
      检查两个stat对象是否指向同一个文件。这在使用文件状态对象进行比较时使用。
      示例代码:

      # 示例代码需要stat对象
      
    • os.path.splitdrive(path): ★ ★
      将路径分割为驱动器名和路径。这主要在Windows操作系统中使用,用于分离驱动器(如C:\)和路径。
      示例代码:

      split_drive = os.path.splitdrive("/usr/bin/python3")
      
    • os.path.supports_unicode_filenames: ★
      检查平台是否支持Unicode文件名。这在处理可能包含Unicode字符的文件名时有用。
      示例代码:

      # 注意:该属性可能不在所有系统上都可用
      

      这些os.path模块中的函数提供了丰富的文件路径操作功能,非常适合用于文件系统的遍历、路径的构建和处理等场景。

进程管理

  1. os.system(command): ★ ★ ★ ★ ★
    用于在子shell中运行指定的命令。它会阻塞当前Python脚本的执行,直到命令执行完成。os.system常用于执行系统命令,如启动外部程序或脚本,执行简单的系统管理任务等。它适合于不需要与外部程序交互的场景。
    示例代码:

    command = "echo Hello, world!"
    status = os.system(command)
    print(f"Command executed with status: {status}")
    
  2. os.exec系列函数 (如os.execl, os.execvp): ★
    用于执行一个新程序,替换当前进程。这意味着一旦exec函数被调用,当前的Python进程将结束,由新程序取代。 os.exec系列函数通常用于需要完全替换当前进程的情况,比如在一个Python脚本中启动另一个程序,然后结束当前脚本。它适用于当不再需要当前正在运行的程序时,直接用另一个程序替换它的场景。
    示例代码: 由于exec函数会结束当前的Python进程,因此在这里无法直接展示其效果。但以下是一个典型的用法示例:

    # os.execl("/usr/bin/python3", "/usr/bin/python3", "some_script.py")
    

举例,新建一个叫x.py的文件,填入下面代码

import osprint('start............')
os.execl("/usr/bin/python3", "/usr/bin/python3", "y.py")
print('I am x.py')

再新建一个y.py文件,填入下面代码

print('I am y.py')

运行x.py文件,你会发现终端的打印只有下面两行

start............
I am y.py

也就是说,程序并未执行I am x.py这句打印。
实际上,

os.execl("/usr/bin/python3", "/usr/bin/python3", "y.py")

这个语句解释一下每个参数的意义:

  1. 第一个"/usr/bin/python3"是可执行程序的路径,也就是Python解释器的路径。

  2. 第二个"/usr/bin/python3"是传递给程序的argv[0],这是一个惯例,通常设置为程序的路径或名称。

  3. "y.py"是要执行的Python脚本文件的名称。

如果你的第一个参数是 "y.py",那么操作系统会尝试将这个脚本文件当作可执行程序来运行,这通常不会成功,除非该脚本文件具有执行权限并且以像 #!/usr/bin/env python3 这样的shebang行开头。

结论

本篇博客继续承接上篇主要讲了os库中系统信息和进程管理操作的函数,并根据出现频次来给出星级评定,供读者参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/591256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024,启动(回顾我的2023)

零.前言 打开博客想写个年度总结,发现已经半年没有更新文章了,排名从几千掉到了几万,不过数据量还是不错的。 时间过得可真快,2023年是充满动荡的一年,上半年gpt横空出世,下半年各种翻车暴雷吃瓜吃到嘴软…

系统编程--VIM

这里写目录标题 vim三种工作模式进入文本模式的快捷键在命令模式下进行文本编辑 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 vim 三种工作模式 具体可见第二章对vim的详细介绍 …

前端vue部署nginx多端口文件配置

nginx.conf 文件 worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;# 开启gzip压缩gzip on;gzip_static on;# 不压缩临界值,大于1K的才…

C:宏:编程风格:井号与define之间的空格

在这一篇中有提到,井号与define之间空格,可能导致搜索上的一些问题。 https://mzhan017.blog.csdn.net/article/details/135289451 今天看到有专门做这个空格的修改: https://sourceware.org/git/?pglibc.git;acommitdiff;hfcf70d4114db9ff…

第二节 linux操作系统安装与配置

一:Vmware虚拟机安装与使用   ①VMware是一个虚拟PC的软件,可以在现有的操作系统上虚拟出一个新的硬件环境,相当于模拟出一台新的PC ,以此来实现在一台机器上真正同时运行多个独立的操作系统。   ②VMware主要特点&#xff1a…

ES6 Module详解

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

SELinux 基本原理

本文讲述 SELinux 保护安全的基本原理 首发公号:Rand_cs 安全检查顺序 不废话,直接先来看张图 当我们执行系统调用的时候,会首先对某些错误情况进行检查,如果失败通常会得到一些 error 信息,通过查看全局变量 errno …

Python PDF转换为图片的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Kingbase单实例场景下更新license步骤

查进程 确定在运行的kingbase服务是在用的服务,避免因多个kingbase服务混淆 [kingbasenode1 V8]$ ps -ef | grep Kingbase kingbase 3190 1 0 10:06 ? 00:00:00 /KingbaseES/V8/Server/bin/kingbase -D /data 查看license信息 license文件位置&…

基于Flutter构建小型新闻App

目录 1. 概述 1.1 功能概述 1.2 技术准备 1.3 源码地址 2. App首页 2.1 pubspec依赖 2.2 热门首页组件 2.2.1 DefaultTabController 2.2.2 Swiper 2.3 新闻API数据访问 2.4 热门首页效果图 3. 新闻分类 3.1 GestureDetector 3.2 新闻分类效果图 4. 收藏功能 4…

sentinel相关面试题及答案

数据结构和算法 1、什么是哨兵值?它在算法中是如何使用的? 哨兵值是在计算中用作标记或信号的特殊值,通常用于指示数据结构的边界或结束,或者作为检测特定条件的触发器。在算法中,哨兵值的使用可以简化代码并提高效…

知识付费小程序系统源码:轻松实现 一站啊运营模式+完整的代码包 附安装部署的矫教程

在当今社会,知识的价值愈发凸显。人们对于优质内容的渴求,使得知识付费市场不断扩大。然而,对于许多内容创作者而言,搭建和维护一个知识付费平台的成本较高,技术门槛也相对较高。下面小编来和大家分享一款知识付费小程…

静态类成员分配

{ // set size // allot storage // initialize pointer // set object count 这条语句将静态成员 num_strings的值初始化为0。请注意,不能在类声明中初始化静态成员变量,这 是因为声明描述了如何分配内存,但并不分配内存。您可以使用这种格式来创建对象,从而分配和初始化 内…

【Reading Notes】(2)

文章目录 FreestyleHip-hop dance and MusicProgrammerMaster Freestyle 都说人的成长有三个阶段,第一个阶段认为自己独一无二,天之骄子;第二个阶段发现自己原来如此渺小,如此普通,沮丧失望;第三阶段&#…

K8S学习指南(58)-K8S核心组件Kubelet简介

文章目录 前言一、设计思想1.1 分而治之的原则1.2 声明式管理 二、主要功能2.1 容器生命周期管理2.2 资源管理2.3 网络管理 三、内部工作原理3.1 Pod描述同步3.2 容器运行时接口3.3 健康检查和自愈 四、常见的故障排查4.1 日志分析4.2 资源不足4.3 网络问题 五、总结 前言 Kub…

软考高级哪个简单?

对于没有相关知识基础的考生而言,软考高级考试具有一定的难度。软考高级考试包括五个科目,分别是信息系统项目管理师、系统分析师、系统规划与管理师、系统架构设计师以及网络规划设计师。 不同科目的难易度并不会相差太大,不过在高级考试中&…

为什么德国如此重视可持续性有机葡萄酒种植?

可持续性在德国葡萄栽培中越来越重要,它包括对葡萄酒行业的生态、经济和社会问题给予同等的考虑。在过去的几年里,世界范围内出现了许多不同的可持续葡萄酒生产项目。 以可持续发展为导向的酒庄是如何运营的?作为可持续发展整体方法的一部分&…

「MySQL运维常见问题及解决方法」

「MySQL运维常见问题及解决方法」 一、查看MySQL数据库安装路径1.1、方式一 --SHOW VARIABLES LIKE basedir;1.2、方式二 --ps -ef | grep mysql 二、MySQL设置连接数与最大并发数2.1、永久生效--修改my.cnf文件2.2、临时生效--通过命令设置的全局变量 三、其他相关参数设置四、…

一文初识Linux进程(超详细!)

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:HEART BEAT—YOASOBI 2:20━━━━━━️💟──────── 5:35 🔄 ◀️ ⏸ ▶️ ☰ …

信息安全评估

评估基础 安全评估是什么? 是针对潜在影响正常执行其职能的行为产色产生干扰或破坏的因素进行识别、评价的过程 广义上是综合的包括测试、检测、测评、审核、评估检查等进行综合评价和预测;狭义的就是某个信息安全风险风评 为什么要做安全评估? 是…