Python操作系统交互的15个实用命令

对于Python初学者而言,掌握如何使用Python与操作系统进行交互是一项非常实用的技能。这不仅能够让你的脚本更加灵活强大,还能在自动化任务处理、文件管理等方面大显身手。下面,我们将通过10个简单到复杂的实例,逐步引导你学习如何运用Python的ossubprocess模块来执行操作系统命令。

1. 列出当前目录下的所有文件

首先,让我们从最基本的开始——列出当前目录下的所有文件和文件夹。

import osdef list_files():files = os.listdir('.')print("当前目录下的文件和文件夹:")for file in files:print(file)list_files()

这段代码使用了os.listdir('.').代表当前目录,它返回一个列表,包含了该目录下所有文件和文件夹的名字。

2. 检查文件是否存在

在进行文件操作之前,检查文件是否存在是基础而重要的一步。

def check_file(filename):return os.path.exists(filename)print("文件是否存在:", check_file('example.txt'))

这里,os.path.exists()函数用于检查指定路径的文件或目录是否存在。

3. 创建目录

接下来,学习如何创建目录。

def create_directory(directory):os.makedirs(directory, exist_ok=True)create_directory('new_folder')

os.makedirs()可以创建多级目录,exist_ok=True防止因目录已存在而抛出异常。

4. 删除文件

小心使用,删除操作不可逆!

def delete_file(filename):if os.path.exists(filename):os.remove(filename)else:print("文件不存在")delete_file('no_exist.txt')  # 示例:尝试删除一个不存在的文件

5. 移动或重命名文件

文件管理中的常见操作。

def move_file(src, dst):os.rename(src, dst)move_file('old_name.txt', 'new_name.txt')

os.rename()既可用于重命名文件,也可用于在同一文件系统内移动文件。

6. 运行外部命令(基本)

使用subprocess模块执行操作系统命令。

import subprocessdef run_command(command):subprocess.run(command, shell=True)run_command('dir')  # 在Windows中列出目录,Linux下使用'ls'

注意:shell=True允许直接传递字符串作为命令,但有安全风险,特别是当命令部分来自用户输入时。

7. 获取环境变量

了解系统环境配置。

def get_env_variable(var_name):return os.environ.get(var_name, "未找到")print(get_env_variable('PATH'))

os.environ是一个字典,包含了所有的环境变量。

8. 改变当前工作目录

有时候,我们需要在不同的目录间切换。

def change_dir(new_dir):os.chdir(new_dir)print("当前目录已改为:", os.getcwd())change_dir('new_folder')

os.chdir()改变当前工作目录,os.getcwd()则用来获取当前工作目录。

9. 执行命令并捕获输出

有时候我们需要获取命令的输出。

def capture_output(command):result = subprocess.check_output(command, shell=True, text=True)return result.strip()print(capture_output('echo Hello, World!'))

这里,check_output()执行命令并返回其输出,text=True使输出为文本格式而非字节串。

10. 高级:批量重命名文件

最后,一个进阶示例,批量重命名文件。

import globdef batch_rename(pattern, new_name_base, extension):for count, filename in enumerate(glob.glob(pattern)):new_name = f"{new_name_base}_{count}.{extension}"os.rename(filename, new_name)print(f"重命名: {filename} -> {new_name}")batch_rename('*.txt', 'document', 'txt')

这个例子展示了如何使用glob.glob()匹配文件模式,并利用循环批量重命名文件。


进阶实践与技巧

11. 并行执行命令

在处理大量文件或长时间运行的任务时,利用并行处理可以显著提高效率。Python的concurrent.futures模块可以帮助我们实现这一点。

from concurrent.futures import ThreadPoolExecutor
import timedef slow_command(n):return f"Command {n} completed."def parallel_commands(commands):with ThreadPoolExecutor() as executor:results = list(executor.map(slow_command, commands))return resultscommands = [i for i in range(5)]
print(parallel_commands(commands))

这段代码创建了一个线程池来并行执行命令,大大减少了总等待时间。

12. 使用shlex.split()安全地分割命令行参数

当需要将字符串作为命令行指令执行时,使用shlex.split()可以更安全地处理包含空格和特殊字符的字符串。

import shlexcommand_str = 'echo "Hello, World!"'
safe_args = shlex.split(command_str)
subprocess.run(safe_args)

这样处理后,即使字符串中有引号或空格,也能正确解析为命令行参数。

13. 实时监控命令输出

有时候我们需要实时查看命令的输出,而不是等待命令完全执行完毕。subprocess.Popen提供了这样的能力。

import subprocessdef stream_output(command):process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True, text=True)while True:output = process.stdout.readline()if output == '' and process.poll() is not None:breakif output:print(output.strip())rc = process.poll()print(f"命令完成,退出码: {rc}")stream_output('ping www.google.com')

这段代码创建了一个持续读取子进程输出的循环,直到命令执行完毕。

14. 错误处理与日志记录

在执行操作系统命令时,正确处理错误是非常重要的。使用try-except结构,并考虑使用Python的logging模块记录日志。

import logginglogging.basicConfig(level=logging.INFO)def execute_with_logging(command):try:subprocess.run(command, check=True, shell=True)logging.info(f"命令执行成功: {command}")except subprocess.CalledProcessError as e:logging.error(f"命令执行失败: {command}, 错误码: {e.returncode}")execute_with_logging('nonexistent_command')  # 示例错误命令

这样可以确保在命令失败时,你能够得到清晰的反馈。

15. 综合应用:自动化备份脚本

结合以上知识,编写一个简单的自动化备份脚本,将指定目录的内容打包并移动到备份目录。

import shutil
from datetime import datetimedef backup_folder(source, destination):timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')backup_name = f"backup_{timestamp}.zip"shutil.make_archive(backup_name, 'zip', source)shutil.move(backup_name, os.path.join(destination, backup_name))print(f"备份完成: {backup_name} 移动到了 {destination}")backup_folder('source_folder', 'backup_folder')

这个脚本使用了shutil.make_archive创建zip文件,然后移动到备份目录,展示了Python在文件管理和自动化任务中的强大能力。


通过这些进阶实践和技巧,你的Python脚本将变得更加强大和灵活。不断实践,结合具体需求进行创新,你的编程技能将不断进步。

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

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

相关文章

港湾周评|李小加“刀刃向内”裁员

《港湾商业观察》李镭 近年来争议颇大的滴灌通风波不断。 在交100万付费上班不久,最新又被曝出裁员。这位前港交所总裁、金融圈鼎鼎大名的李小加,没想到成立不足三年便迎来了重大挑战。 日前,滴灌通确认了公司组织架构已经调整&#xff0c…

Flutter 中的 SliderTheme 小部件:全面指南

Flutter 中的 SliderTheme 小部件:全面指南 Flutter 是一个创新的 UI 工具包,它允许开发者通过 Dart 语言来创建美观、高效的移动和 Web 应用。在 Flutter 的交互组件中,滑块(Slider)是一种常用的控件,用于…

【教程】如何实现WordPress网站降级(用于解决插件和主题问题)

在最新可用版本上运行WordPress安装、插件和主题是使用该平台的关键最佳实践。还建议使用最新版本的PHP。但是,在某些情况下,这是不谨慎或不可能的。 如果您发现自己处于这种情况,您可能需要撤消更新并降级您的WordPress网站(或其中的一部分)。幸运的是,有一些方法可用于…

对已运行的kafka集群添加副本

在已经运行的kafka集群中(业务主题已创建),如果一开始配置的默认副本是1,则后续再去修改配置文件为3,也只是针对后续新增的主题有效。原先主题不会生效。需要通过json文件去修改。 先创建__consumer_offsets主题的JSO…

深入浅出Java多线程

系列文章目录 文章目录 系列文章目录前言一、多线程基础概念介绍线程的状态转换图线程的调度一些常见问题 二、Java 中线程的常用方法介绍Java语言对线程的支持Thread常用的方法三、线程初体验(编码示例) 前言 前些天发现了一个巨牛的人工智能学习网站&…

【验证码识别】Yolov8入门到实战点选验证码数据集分类训练,孪生训练,导出onnx,搭建部署接口

【验证码识别】Yolov8入门到实战点选验证码数据集分类训练,孪生训练,导出onnx,搭建部署接口 文章目录 【验证码识别】Yolov8入门到实战点选验证码数据集分类训练,孪生训练,导出onnx,搭建部署接口声明一、标…

scButterfly:单细胞跨模态翻译

技术限制导致了高噪声的多模态数据。尽管已经提出了计算方法来跨模态翻译单细胞数据,但是这些方法的泛化性仍然受到制约。scButterfly是一种基于双重对齐变分自编码器和数据增强方案的多功能单细胞跨模态翻译方法。通过对多个数据集进行全面的实验,证明了…

工业安全智勇较量,赛宁网安工业靶场决胜工业网络攻防对抗新战场

2024年1月30日,工信部发布《工业控制系统网络安全防护指南》(工信部网安〔2024〕14号),围绕安全管理、技术防护、安全运营、责任落实四方面提出安全防护要求,强调聚焦安全薄弱关键环节,强化技术应对策略&am…

关于磁盘管理

磁盘管理是操作系统提供的一项功能,用于高效地组织、维护和控制计算机的硬盘驱动器及其卷(分区)。通过磁盘管理工具,用户和管理员可以执行多种与存储相关的高级任务,主要包括: 初始化新磁盘: …

js前端怎么封装

js前端怎么封装 在JavaScript前端开发中,封装是一个至关重要的概念。通过封装,我们可以将复杂的逻辑和功能隐藏在简单的接口后面,提高代码的可读性、可维护性和复用性。那么,如何有效地在JavaScript前端进行封装呢?接…

Passion编程语言:探索其深邃的四个维度、五大特性、六大应用及七大前景

Passion编程语言:探索其深邃的四个维度、五大特性、六大应用及七大前景 在编程的浩瀚宇宙中,Passion编程语言如同一颗璀璨的新星,以其独特的魅力和深厚的内涵吸引着越来越多的探索者。本文将从四个方面、五个方面、六个方面和七个方面&#…

Caliburn.Micro框架学习笔记——窗体管理对象的基本使用

Caliburn.Micro 的窗口管理器(Window Manager)是一个强大的工具,用于管理 WPF 应用程序中的窗口和对话框。它简化了窗口的创建、显示和关闭等操作,使得视图和视图模型的交互更加直观和易于维护。 它能够实现的功能包括 显示窗口&…

大学生社团活动平台系统基于springboot+vue的社团管理系统java项目sprignboot项目

文章目录 大学生社团活动平台一、项目介绍二、部分功能截图三、部分代码展示四、底部获取项目源码(9.9¥带走) 大学生社团活动平台 一、项目介绍 基于springbootvue的前后端分离大学生社团活动平台 系统角色 : 学生、社长、管理员 1、学生…

pytorch笔记:topk

1 介绍 返回给定输入张量沿指定维度的最大的 k 个元素 如果没有指定 dim 参数,则默认选择输入张量的最后一个维度如果 largest 设置为 False,则返回最小的 k 个元素。返回一个命名元组 (values, indices),其中包含每一行在指定维度 dim 上最…

Frida

配置环境 查看ubuntu版本 cat /etc/lsb-release设置时区 dpkg-reconfigure tzdataadb adb:(Android Debug Bridge)是一个用于在计算机和Android设备之间进行通信的命令行工具。它允许开发人员在计算机上执行各种命令,如安装应…

Git配置SSH-Key

git config --global user.name 沈健 git config --global user.email sjshenjianoutlook.com初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置 1 生成 RSA 密钥 ssh-keygen -t rsa2. 获取 RSA 公钥内容,并配置到 SSH公钥 中 …

FENDI CLUB精酿啤酒中原麦汁浓度的高低有何区别?

关于精酿啤酒,有两个关键数据,一个是原麦汁浓度,一个是酒精度。酒精度无非是含酒精的高低,但原麦汁浓度又是什么呢?另外精酿啤酒中原麦汁浓度有高有低,究竟有哪些区别呢? 原麦汁浓度是指啤…

c语言是编程软件还是编程语言?深入解析C语言的本质与定位

c语言是编程软件还是编程语言?深入解析C语言的本质与定位 在科技日新月异的今天,编程语言和编程软件在软件开发中扮演着举足轻重的角色。然而,对于初学者来说,这两者之间的界限往往模糊不清,尤其是对于像C语言这样的经…

息壤,让全网算力随愿可得

【全球云观察 | 科技热点关注】 当下的AIGC时代,算力领域面临的最大挑战是什么? 对于这个问题,仁者见仁,智者见智。但答案中最吸引业界眼球的莫过于,算力调度。为什么呢? 「因时而生」&#xf…

2006NOIP普及组真题 4. 数列

线上OJ: 【06NOIP普及组】数列 思考: 这道题大概率是一道可以使用“瞪眼法”找到规律的题目。我们尝试把数据补充的更多,以便于寻找规律 当 k3 时,k的幂次为1, 3, 9, 27, 81… 从上述推理中,我们发现要输出的幂次和中…