探索Python的Shell力量:Plumbum库揭秘

news2024/12/26 21:08:14

文章目录

    • 探索Python的Shell力量:Plumbum库揭秘
      • 第一部分:背景介绍
      • 第二部分:Plumbum是什么?
      • 第三部分:如何安装Plumbum?
        • 2. 创建管道
        • 3. 重定向
        • 4. 工作目录操作
        • 5. 前台和后台执行
      • 第五部分:场景应用
        • 1. 文件搜索
        • 2. 文本处理
        • 3. 远程命令执行
      • 第六部分:常见Bug及解决方案
        • 1. 命令未找到
        • 2. 管道错误
        • 3. 远程连接失败
      • 第七部分:总结

在这里插入图片描述

探索Python的Shell力量:Plumbum库揭秘

第一部分:背景介绍

在Python的世界里,我们经常需要执行系统命令、处理文件路径和操作系统调用。但传统的方法是使用subprocess模块,它虽然功能强大,但使用起来略显繁琐。Plumbum库的出现,就是为了让我们以更Pythonic的方式处理这些任务。这个库不仅提供了命令行程序封装、管道和重定向支持,还有本地文件系统操作和进程管理功能。

第二部分:Plumbum是什么?

Plumbum是一个小型但功能丰富的Python库,用于编写类似shell脚本的程序。它的核心理念是“永远不要再写shell脚本”,通过模仿shell语法(shell combinators)来保持Python特性和跨平台性。

第三部分:如何安装Plumbum?

安装Plumbum非常简单,只需要在命令行中运行以下命令:

pip install plumbum

如果你使用Anaconda,也可以通过以下命令从conda-forge通道安装:

conda install -c conda-forge plumbum
`

### 第四部分:简单库函数使用方法
#### 1. 执行系统命令
```python
from plumbum import local
ls = local["ls"]
print(ls())

这段代码会列出当前目录下的所有文件和文件夹。

2. 创建管道
from plumbum.cmd import ls, grep, wc
chain = ls["-a"] | grep["-v", "\\.py"] | wc["-l"]
print(chain())

这段代码会统计非Python文件的数量。

3. 重定向
from plumbum.cmd import cat, head
print((cat < "setup.py") | head["-n", 4]())

这段代码会打印setup.py文件的前四行。

4. 工作目录操作
with local.cwd(local.cwd / "docs"):
    chain()

这段代码会在docs目录下执行chain命令。

5. 前台和后台执行
from plumbum import FG, BG
(ls["-a"] | grep[r"\.py"]) & FG

这段代码会在前台执行,输出Python文件列表。

第五部分:场景应用

1. 文件搜索
from plumbum.cmd import find
print(find[".", "-name", "*.py"]())

这段代码会搜索所有Python文件。

2. 文本处理
from plumbum.cmd import sed
print(sed["s/old/new/g", "example.txt"]())

这段代码会在example.txt中替换所有oldnew

3. 远程命令执行
from plumbum import SshMachine
remote = SshMachine("user@host")
remote["ls"]()

这段代码会通过SSH在远程主机上执行ls命令。

第六部分:常见Bug及解决方案

1. 命令未找到

错误信息:CommandNotFound
解决方案:确保命令路径正确或已添加到系统PATH

local.get("command", "/path/to/command")
2. 管道错误

错误信息:SubprocessError
解决方案:检查管道中的每个命令是否正确执行。

try:
    chain = ls["-a"] | grep["-v", "\\.py"] | wc["-l"]
    print(chain())
except SubprocessError as e:
    print(e)
3. 远程连接失败

错误信息:AuthenticationException
解决方案:确保SSH密钥配置正确。

remote = SshMachine("user@host", keyfile="/path/to/key")

第七部分:总结

Plumbum库以其简洁、跨平台的特性,为Python开发者提供了一个强大的工具,使得编写命令行程序变得更加高效和Pythonic。无论是本地命令执行、文件操作还是远程命令管理,Plumbum都能轻松应对。探索Plumbum的更多可能性,让您的命令行编程变得更加高效!

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!

在这里插入图片描述

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

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

相关文章

点击文本将内容填入tinymce-vue 富文本编辑器的光标处

富文本编辑器组件 <template><div ref"tinymceBox" class"tinymce-box"><Editor id"myEditor" v-model"contentValue" :init"init" :disabled"disabled" blur"inputBlur" click"o…

星海智算:风月ComfyUI_SD3.5

&#xff08;一&#xff09;镜像介绍 1、风月ComfyUI_SD3.5​ 占用69.71G磁盘&#xff0c;为用户预留了近30个G使用。 2、SD3.5​ SD3.5&#xff0c;即Stable Diffusion 3.5&#xff0c;是Stability AI推出的最新图像生成模型&#xff0c;是Stable Diffusion 3.0版本的升级版…

在模方置平建筑失败的原因是什么?

在模方置平建筑失败的原因是什么&#xff1f; 可能是obj拓扑不连续&#xff0c;可以在网格大师使用osgb转obj功能&#xff0c;选择拓扑或者重建。 网格大师是一款能够解决实景三维模型空间参考、原点、瓦块大小不统一&#xff0c;重叠区域处理问题的工具“百宝箱”&#xff0c…

python 语言入门

目录 1.发展历程 2.优缺点 3.环境搭建 3.1.Anaconda 3.2.VSCode 3.3.重装自己的独立环境 4.第一个 python 程序 4.1.创建一个 .py 的文件 4.2.编写 python 代码 ​4.3.运行 python 代码 5.注释 5.1.单行注释 5.2.多行注释 6.转义字符 7.变量 7.1.变量类型 7.2…

C++11 --- 智能指针详解

C11 智能指针 一、智能指针的使用场景分析二、RAII和智能指针的设计思路三、智能指针的本质及衍生的问题四、C标准库的智能指针的使用五、智能指针的原理&#xff08;模拟实现&#xff09;1. auto_ptr的模拟实现2. unique_ptr的模拟实现3. shared_ptr的模拟实现&#xff08;简单…

(实战)WebApi第13讲:怎么把不同表里的东西,包括同一个表里面不同的列设置成不同的实体,所有的给整合到一起?【前端+后端】、前端中点击标签后在界面中显示

一、实现全局跨域&#xff1a;新建一个Controller&#xff0c;其它的controller都继承它 1、新建BaseController 2、在后端配置&#xff0c;此处省略【详情见第12讲四、3、】 3、其它的控制器继承BaseController&#xff0c;这个时候就能够完成全局的跨域 【向后台传cookie和…

【C++】map和set的介绍及使用

前言&#xff1a; map和 set 是 C STL&#xff08;标准模板库&#xff09;中的两种非常重要的容器&#xff0c;它们基于一种叫做平衡二叉搜索树&#xff08;通常是红黑树&#xff09;的数据结构来实现。在 C 中&#xff0c;map 是一个键值对容器&#xff0c;set 只存储唯一的键…

Python的函数(补充浅拷贝和深拷贝)

一、定义 函数的定义&#xff1a;实现【特定功能】的代码块。 形参&#xff1a;函数定义时的参数&#xff0c;没有实际意义 实参&#xff1a;函数调用/使用时的参数&#xff0c;有实际意义 函数的作用&#xff1a; 简化代码提高代码重用性便于维护和修改提高代码的可扩展性…

el-input 正则表达式校验输入框不能输入汉字

<el-form :model"data1" :rules"rules" ref"ruleForm" label-width"210px" class"demo-ruleForm"><el-form-item label"锯路&#xff1a;" prop"sawKref"><el-input class"inptWid…

嵌入式linux系统中I2C控制实现AP3216C传感器方法

大家好,今天主要给大家分享一下,如何使用linux系统里面的I2C进行控制实现。 第一:Linux系统中I2C简介 Linux 内核开发者为了让驱动开发工程师在内核中方便的添加自己的 I2C 设备驱动程序,更容易的在 linux 下驱动自己的 I2C 接口硬件,进而引入了 I2C 总线框架。与 Linux 下…

OceanBase 应用实践:如何处理数据空洞,降低存储空间

问题描述 某保险行业客户的核心系统&#xff0c;从Oracle 迁移到OceanBase之后&#xff0c;发现数据存储空间出现膨胀问题&#xff0c;数据空间 datasize9857715.48M&#xff0c;实际存储占用空间17790702.00M。根据 required_mb - data_mb 值判断&#xff0c;数据空洞较为严重…

【flask开启进程,前端内容图片化并转pdf-会议签到补充】

flask开启进程,前端内容图片化并转pdf-会议签到补充 flask及flask-socketio开启threading页面内容转图片转pdf流程前端主js代码内容转图片-browser端browser端的同步编程flask的主要功能route,def 总结 用到了pdf,来回数据转发和合成,担心flask卡顿,响应差,于是刚好看到threadi…

QT栅格布局的妙用

当groupBox中只有一个控件时&#xff0c;我们想要它满格显示可以对groupBox使用栅格布局

MyBatis快速入门(上)

MyBatis快速入门&#xff08;上&#xff09; 一、MyBatis 简介1、概述2、JDBC、Hibernate、MyBatis 对比 二、MyBatis 框架搭建1、开发环境2、创建maven工程3、创建MyBatis的核心配置文件4、创建mapper接口5、创建MyBatis的映射文件6、通过junit测试功能7、加入log4j2日志功能 …

在Pybullet中加载Cinema4D创建的物体

首先明确我们的目标&#xff0c;是希望在cinema4D中创建自己想要的模型&#xff0c;并生成.obj文件&#xff0c;然后在pybullet中加载.obj文件作为静态物体&#xff0c;可以用于抓取物体&#xff0c;避障物体。&#xff08;本文提到的方法只能实现静态物体的建模&#xff0c;如…

第十三届交通运输研究(上海)论坛┆智能网联汽车技术现状与研究实践

0.简介 交通运输研究&#xff08;上海&#xff09;论坛&#xff08;简称为TRF&#xff09;是按照国际会议的组织原则&#xff0c;为综合交通运输领域学者们构建的良好合作交流平台。交通运输研究&#xff08;上海&#xff09;论坛已经成功举办了十二届&#xff0c;凝聚了全国百…

Pr:视频过渡快速参考(合集 · 2025版)

Adobe Premiere Pro 自带七组约四十多个视频过渡 Video Transitions效果&#xff0c;包含不同风格和用途&#xff0c;可在两个剪辑之间创造平滑、自然的转场&#xff0c;用来丰富时间、地点或情绪的变化。恰当地应用过渡可让观众更好地理解故事或人物。 提示&#xff1a; 点击下…

stm32 踩坑笔记

串口问题&#xff1a; 问题&#xff1a;会改变接收缓冲的下一个字节 串口的初始化如下&#xff0c;位长度选择了9位。因为要奇偶校验&#xff0c;要选择9位。但是接收有用数据只用到1个字节。 问题原因&#xff1a; 所以串口接收时会把下一个数据更改

昇思大模型平台打卡体验活动:项目4基于MindSpore实现Roberta模型Prompt Tuning

基于MindNLP的Roberta模型Prompt Tuning 本文档介绍了如何基于MindNLP进行Roberta模型的Prompt Tuning&#xff0c;主要用于GLUE基准数据集的微调。本文提供了完整的代码示例以及详细的步骤说明&#xff0c;便于理解和复现实验。 环境配置 在运行此代码前&#xff0c;请确保…

后悔没早点知道,Coze 插件 + Cursor 原来可以这样赚钱

最近智能体定制化赛道异常火爆。 打开闲鱼搜索"Coze 定制",密密麻麻的服务报价直接刷屏,即使表明看起来几十块的商家,一细聊,都是几百到上千不等的报价。 有趣的是,这些智能体定制化服务背后,最核心的不只是工作流设计,还有一个被很多人忽视的重要角色 —— …