基于 plumbum 跨平台执行Shell脚本

Plumbum将系统命令包装成Python对象,是一款Shell组合器。

语法简洁:相比subprocess大幅减少代码量,例如ls["-l", "/tmp"]()替代复杂的subprocess.run调用。

类型安全:参数传递时自动校验类型,避免Shell注入(如文件名包含分号时自动转义)。

功能完备:支持管道、后台执行、环境变量设置、超时控制等高级特性。

跨平台兼容:通过plumbum.machines模块支持本地/远程命令执行(需配合Paramiko)。

安装

shell 复制代码
pip install plumbum

本地命令

python 复制代码
from plumbum import local

git = local['git']
print(git)
print(git('--version'))

# D:\Program Files\Git\cmd\git.exe
# git version 2.27.0.windows.1

管道

python 复制代码
>>> from plumbum.cmd import ls, grep, wc
>>> chain = ls["-a"] | grep["-v", r"\.py"] | wc["-l"]
>>> print(chain)
/bin/ls -a | /bin/grep -v '\.py' | /usr/bin/wc -l
>>> chain()
'27\n'

前后台执行

powershell 复制代码
>>> from plumbum import FG, BG
>>> (ls["-a"] | grep[r"\.py"]) & FG         # The output is printed to stdout directly
build.py
setup.py
translations.py
>>> (ls["-a"] | grep[r"\.py"]) & BG         # The process runs "in the background"
<Future ['/bin/grep', '\\.py'] (running)>

SSH 远程执行

powershell 复制代码
>>> from plumbum import SshMachine
>>> remote = SshMachine("somehost", user = "john", keyfile = "/path/to/idrsa")
>>> r_ls = remote["ls"]
>>> with remote.cwd("/lib"):
...     (r_ls | grep["0.so.0"])()
...
'libusb-1.0.so.0\nlibusb-1.0.so.0.0.0\n'

相关链接

https://github.com/tomerfiliba/plumbum

相关推荐
步行cgn41 分钟前
Spring Boot 将配置绑定到第三方对象详解
spring boot·后端·python
傻啦嘿哟8 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670798 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
2601_962077608 小时前
python Dejavu库快速识别音频指纹实例探究
python·音乐识别·dejavu库·音频指纹识别·实例探究
科技苑8 小时前
如何用Python编程实现一个简单的Web爬虫?
人工智能·python
dayDayupbetter9 小时前
Visual C++ 2010安装与使用高手秘籍
python
隐擎fox9 小时前
深入理解网络传输层安全:TLS 指纹识别(JA3/JA4)原理与 Python 协议层检测实战
爬虫·python·网络协议·安全·网络安全·https
医疗信息化王工9 小时前
DataForge:基于 Python 的数据库批量导出 Excel 工具——从架构到部署的全流程实战
数据库·python·excel
小玮看世界10 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
Java陈序员10 小时前
轻量运维面板!一款现代化的服务器控制面板工具!
运维·服务器·python·react.js·github