Sh – Python Shell命令管理库:系统编程利器

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是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库提供了强大的错误处理机制:

基础错误处理

推荐