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

python基础语法9,用os库实现系统操作并用sys库实现文件操作(简单易上手的python语法教学)

一、os库

os.system() 是 Python os 库中用于执行操作系统命令的重要方法,它允许在 Python 程序中直接调用系统 shell 命令(如 Linux 的 bash 命令或 Windows 的 cmd 命令)。

基本语法

import os
os.system(command)
  1. command:要执行的系统命令字符串(与在终端 / 命令提示符中输入的命令格式一致)
  2. 返回值:命令执行的退出状态码(0 表示成功,非 0 表示执行出错)

工作原理

os.system() 会创建一个子进程来执行指定的命令,并且会等待命令执行完成后再继续执行 Python 程序。在命令执行期间,Python 程序会阻塞(暂停)。

常用示例

1. 执行简单命令
import os# 在Linux/macOS中列出当前目录内容
os.system("ls")# 在Windows中列出当前目录内容
os.system("dir")# 创建文件夹
os.system("mkdir new_folder")# 删除文件
os.system("rm test.txt")  # Linux/macOS
# os.system("del test.txt")  # Windows
2. 获取命令执行结果
import os# 执行命令并获取退出状态码
status = os.system("echo Hello World")
print(f"退出状态码: {status}")  # 成功执行返回0# 执行错误命令
error_status = os.system("invalid_command")
print(f"错误状态码: {error_status}")  # 非0值表示执行失败
3. 执行复杂命令

可以执行包含管道、重定向等的复杂命令:

import os# 将命令输出重定向到文件
os.system("ls -l > file_list.txt")# 使用管道命令
os.system("ps aux | grep python")  # Linux/macOS
4. 结合变量使用
import osfolder_name = "my_folder"
# 动态生成命令
os.system(f"mkdir {folder_name}")

注意事项

  1. 平台差异性
    1. 不同操作系统的命令语法不同(如 Linux 的rm和 Windows 的del
    2. 建议在跨平台程序中使用条件判断:
import os
import sysif sys.platform.startswith('win'):os.system("dir")  # Windows命令
else:os.system("ls")   # Linux/macOS命令
2.安全性问题

避免直接使用用户输入作为命令参数,可能导致命令注入攻击:

# 不安全的做法
user_input = "test; rm -rf /"  # 恶意输入
os.system(f"echo {user_input}")

3.局限性

  • 只能获取命令的退出状态码,无法直接获取命令输出内容
  • 对于需要捕获输出的场景,建议使用 subprocess 模块

4.替代方案

Python 3.5+ 推荐使用更强大的 subprocess 模块,它提供了更灵活的进程管理功能:

import subprocess# 捕获命令输出
result = subprocess.run("ls -l", shell=True, capture_output=True, text=True)
print(result.stdout)  # 输出命令执行结果
print(result.returncode)  # 输出退出状态码

适用场景

  • 执行简单的系统命令
  • 快速脚本开发
  • 需要在 Python 中整合少量系统命令的场景

二、sys库

sys 库是 Python 标准库中用于与 Python 解释器交互的核心模块,提供了一系列关于 Python 运行环境、命令行参数、标准输入输出等的操作接口。它与操作系统交互密切,常用于获取程序运行信息、控制程序退出、处理命令行参数等场景。

一、常用功能及示例

1. 命令行参数:sys.argv

sys.argv 是一个列表,存储程序运行时传入的命令行参数。其中:

  1. sys.argv[0] 表示程序本身的路径 / 文件名
  2. sys.argv[1:] 表示后续传入的参数

示例代码:

import sys# 打印所有命令行参数
print("命令行参数列表:", sys.argv)
print("程序文件名:", sys.argv[0])
print("传入的参数数量:", len(sys.argv) - 1)
print("传入的参数:", sys.argv[1:])

运行方式(终端):

python demo.py hello world 123

输出:

命令行参数列表: ['demo.py', 'hello', 'world', '123']
程序文件名: demo.py
传入的参数数量: 3
传入的参数: ['hello', 'world', '123']
2. 退出程序:sys.exit()

sys.exit([status]) 用于终止当前程序运行,可选参数 status 表示退出状态码(0 表示正常退出,非 0 表示异常退出)。

示例代码:

import sysprint("程序开始")# 判断条件,决定是否退出
if len(sys.argv) < 2:print("错误:未传入参数")sys.exit(1)  # 异常退出,状态码 1print("程序正常执行完成")
sys.exit(0)  # 正常退出,状态码 0
3. Python 解释器信息
  1. sys.version:获取 Python 解释器版本信息
  2. sys.version_info:以元组形式返回版本号(主版本、次版本等)
  3. sys.platform:获取当前运行的操作系统平台(如 win32linuxdarwin 等)

示例代码:

import sysprint("Python 版本:", sys.version)
print("版本号元组:", sys.version_info)
print("是否为 Python 3.6+:", sys.version_info >= (3, 6))
print("操作系统平台:", sys.platform)

输出:

Python 版本: 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)]
版本号元组: sys.version_info(major=3, minor=9, micro=7, releaselevel='final', serial=0)
是否为 Python 3.6+: True
操作系统平台: win32
4. 标准输入输出 / 错误流

sys.stdinsys.stdoutsys.stderr 分别表示标准输入、标准输出、标准错误流,可用于重定向输入输出。

示例:重定向打印输出到文件

import sys# 保存原始 stdout
original_stdout = sys.stdout# 重定向到文件
with open("output.txt", "w") as f:sys.stdout = fprint("这段文字会被写入文件")print("而不是显示在控制台")# 恢复原始 stdout
sys.stdout = original_stdout
print("现在恢复正常输出")
5. 模块搜索路径:sys.path

sys.path 是一个列表,存储 Python 解释器搜索模块的路径。当使用 import 导入模块时,解释器会从这些路径中查找模块。

示例代码:

import sysprint("模块搜索路径:")
for path in sys.path:print(f"- {path}")# 临时添加自定义路径(用于导入指定目录的模块)
sys.path.append("D:/my_modules")
print("\n添加自定义路径后:")
print(sys.path[-1])  # 打印最后添加的路径
6. 递归限制:sys.getrecursionlimit() 和 sys.setrecursionlimit()

Python 对递归调用的深度有默认限制(默认约 1000),可通过这两个方法查看或修改限制值。

示例代码:

import sysprint("默认递归深度限制:", sys.getrecursionlimit())# 修改递归深度限制
sys.setrecursionlimit(2000)
print("修改后的递归深度限制:", sys.getrecursionlimit())

二、综合示例

import sysdef sys_demo():# 1. 处理命令行参数print("===== 命令行参数 =====")if len(sys.argv) > 1:print("传入的参数:", sys.argv[1:])else:print("未传入任何参数")# 2. 显示 Python 环境信息print("\n===== Python 环境 =====")print(f"版本:{sys.version.split()[0]}")print(f"运行平台:{sys.platform}")# 3. 演示标准输出重定向print("\n===== 输出重定向 =====")original_stdout = sys.stdoutwith open("temp.log", "w") as f:sys.stdout = fprint("这条信息被写入到 temp.log")sys.stdout = original_stdoutprint("已将部分输出写入 temp.log")# 4. 模块搜索路径print("\n===== 模块搜索路径 =====")print(f"当前工作目录是否在搜索路径中:{os.getcwd() in sys.path}")  # 需要导入 os# 5. 退出程序print("\n程序即将退出")sys.exit(0)if __name__ == "__main__":sys_demo()

三、注意事项

  1. sys 库与 os 库的区别:sys 主要针对 Python 解释器本身,os 主要针对操作系统交互。

  2. 命令行参数处理复杂时,建议使用 argparse 模块(基于 sys.argv 封装,更强大)。

  3. 修改 sys.path 时,建议使用临时添加(程序结束后失效),避免污染全局路径。

  4. 重定向输入输出后,记得恢复原始流,否则可能导致后续打印异常。

http://www.dtcms.com/a/283006.html

相关文章:

  • 猫眼娱乐IOS开发一面手撕算法
  • 嵌入式学习笔记--MCU阶段--DAY06DHT11练习
  • AR智能巡检:电力行业数字化转型的“加速器”
  • 基于Llama的RAG 3种模型配置方法
  • 51c自动驾驶~合集7
  • 基于C#开发solidworks图库中文件(SLDPRT,SLDASM,SLDDRW等)转换为HTML和PDF,提供批量和实时转换
  • AI产品经理面试宝典第28天:自动驾驶与智慧交通融合面试题与答法
  • 自动驾驶激光3D点云处理系统性阐述及Open3D库函数应用
  • MR 处于 WIP 状态的WIP是什么
  • 小模型的价值重估:从“缩水版DeepSeek”到AI系统的基础执行单元20250716
  • Linux 挂载新磁盘导致原文件被隐藏解决方案
  • 【代码】Matlab鸟瞰图函数
  • sqli-labs靶场通关笔记:第23关 注释符过滤
  • 叉车机器人如何实现托盘精准定位?这项核心技术的原理和应用是什么?
  • 静默的田野守护者:Deepoc具身智能如何让除草机器人读懂大地密语
  • Mybatis08-使用pageHelper
  • 本地 AI 问答机器人搭建项目(Ollama + Qwen-7B + LangChain + FastAPI)
  • AI对话聊天与桌宠工具调研报告
  • 【案例分享】基于FastCAE-Acoustics软件对车门进行噪声预测
  • 移动平板电脑安全管控方案
  • 祥云系统开源云商城程序全开源版 个人程序云商城(源码下载)
  • 前端学习7:CSS过渡与动画--补间动画 (Transition) vs 关键帧动画 (Animation)
  • xss-lab1-8关
  • AdsPower 功能详解 | 应用中心使用指南:插件统一管理更高效、更安全!
  • [NOIP][C++] 树的重心
  • 精彩代码分析-1
  • 深入探讨机器学习中的过拟合:从VC维到正则化的贝叶斯视角
  • Alamofire 网络请求全流解析,通俗易懂
  • 降本增效利器:汽车制造中EtherCAT转PROFIBUS DP网关应用探析
  • Linux权限管理:玩转root与用户组