什么是Sh库
在许多Python项目中,经常需要调用Shell命令:管理文件、运行系统进程、与已安装的CLI工具交互。虽然可以使用os.system或subprocess,但它们往往代码冗长,需要手动处理参数、错误和输出。
Sh库提供了一种简洁、Python化的方式来调用Shell命令,就像调用普通Python函数一样。它大大简化了外部工具的集成,使代码更易读、更易调试。
使用Sh的优势
相比标准系统命令执行方法,Sh库拥有多项重要优势:
语法简洁易读 - 命令看起来就像普通Python函数,代码更清晰、更易维护。
自动错误处理 - 库会自动处理返回码,并在出错时抛出异常。
安全性 - 通过正确的参数转义,有效防止命令注入攻击。
灵活性 - 支持管道、后台执行、流式输入输出等多种高级功能。
安装与导入
通过pip安装Sh库:
pip install sh
在代码中只需一行导入即可使用:
import sh
核心工作原理
Sh会自动将任何Shell命令的名称映射为Python函数。这样你就可以用自然的方式调用它们:
print(sh.ls("-l"))
每次调用都会返回一个包含stdout的对象,可以将其转换为字符串、字符串列表、字节等多种格式。
基本用法
文件操作
# 列出文件
print(sh.ls("-lah"))
# 创建文件
sh.touch("file.txt")
# 复制文件
sh.cp("file.txt", "copy.txt")
# 删除文件
sh.rm("copy.txt")
# 创建目录
sh.mkdir("test_dir")
# 移动文件
sh.mv("file.txt", "test_dir/")
文本处理
# 查看文件内容
content = sh.cat("file.txt")
print(str(content))
# 在文件中搜索
matches = sh.grep("python", "*.py")
for match in matches:
print(match.strip())
# 统计行数
line_count = sh.wc("-l", "file.txt")
print(f"行数:{line_count.strip()}")
参数与选项传递
Sh支持多种方式传递命令参数:
位置参数
sh.ls("--color", "auto", "/home/user")
命名参数
# 长选项
sh.ls(color="auto", all=True, human_readable=True)
# 短选项
sh.ls(a=True, l=True, h=True)
混合使用
# 混合参数
sh.find("/home", name="*.py", type="f")
命令输出处理
获取字符串结果
output = sh.ls()
print(str(output))
逐行处理
for line in output:
print(line.strip())
处理字节数据
raw_output = sh.ls()
bytes_data = raw_output.stdout
分割为字符串列表
lines = str(sh.ls()).split('\n')
for line in lines:
if line.strip():
print(line)
错误处理
Sh库提供了强大的错误处理机制: