基于 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

相关推荐
风吹夏回12 小时前
Python 全局异常处理:从“满屏 try-except”到优雅兜底
开发语言·python
小熊Coding12 小时前
Python爬取当当网二手图书项目实战!
开发语言·爬虫·python·beautifulsoup·requests·二手图书
秋912 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本12 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
田里的水稻13 小时前
OE_ubuntu26.04与宿主机之间复制粘贴内容
人工智能·python·机器人
jiayong2314 小时前
02 创建虚拟环境
python
旺仔来了14 小时前
不联网的Linux下部署python环境
linux·开发语言·python
小江的记录本14 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
IP搭子来一个14 小时前
爬虫采集大量返回 403、429,到底卡在哪一环?
网络·爬虫·python
deepin_sir14 小时前
06 综合对比与实战选型——到底该用哪个?
python