首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >sh: 在Python中直接调用shell命令的库

sh: 在Python中直接调用shell命令的库

原创
作者头像
luckpunk
发布于 2025-02-06 00:45:07
发布于 2025-02-06 00:45:07
24000
代码可运行
举报
文章被收录于专栏:Python每日一库Python每日一库
运行总次数:0
代码可运行

Python模块sh(通常指的是sh库,也被称为python-shsh.py)是一个用于在Python中直接调用shell命令的库。它允许你像调用Python函数一样调用shell命令,并且具有一些额外的功能,如命令链式调用、管道、捕获输出等。

一、简介

sh库提供了一种方便的方式来在Python脚本中执行shell命令,并且无需手动处理输入/输出流或错误。这使得在Python中执行复杂的shell任务变得更加简单和直观。

二、安装

你可以使用pip来安装sh库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install sh

三、基本使用

3.1 导入sh模块

首先,你需要在Python脚本中导入sh模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sh import ls, cat, grep

注意,sh模块允许你通过导入的方式直接访问常用的shell命令。在这个例子中,我们导入了lscatgrep命令。

3.2 执行命令

你可以像调用Python函数一样调用shell命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 执行ls命令并打印输出
print(ls('-l'))

# 执行cat命令并读取文件内容
content = cat('example.txt')
print(content)

# 使用grep命令搜索文本
search_result = grep('pattern', 'example.txt')
print(search_result)
3.3 命令链式调用和管道

sh库支持命令的链式调用和管道操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 链式调用ls和grep命令
result = ls('-l', '/path/to/directory') | grep('example')
print(result)

# 也可以显式地使用管道符'|'
result = ls('-l', '/path/to/directory', _pipe=True) | grep('example')
print(result)
3.4 捕获输出和错误

你可以使用stdoutstderr属性来捕获命令的输出和错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 捕获输出
result = ls('-l').stdout.strip()
print(result)

# 捕获错误(如果命令执行失败)
try:
    result = non_existent_command()  # 假设这个命令不存在
except sh.ErrorReturnCode_127:  # sh库为不同的错误代码提供了特定的异常类
    print("Command not found!")
    error_output = result.stderr.strip()  # 仍然可以访问stderr
    print(error_output)
3.5 参数传递

你可以通过位置参数或关键字参数向shell命令传递参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用位置参数
files = ls('/path/to/directory', '*.txt')

# 使用关键字参数(这在某些情况下可能更清晰)
files = ls(path='/path/to/directory', glob='*.txt')

四、注意事项

  • sh库在内部使用subprocess模块来执行命令,因此它受到底层操作系统和Python解释器的限制。
  • • 在处理可能产生敏感数据或需要高安全性的命令时,请确保你的代码是安全的,并避免使用不安全的输入来构建命令。
  • • 当你需要执行复杂的shell脚本或需要更多的控制时,考虑使用subprocess模块或编写一个shell脚本来完成任务,并通过sh库或subprocess模块在Python中调用它。
  • sh库可能不适用于所有情况,特别是当需要更精细地控制输入/输出流或错误处理时。在这些情况下,subprocess模块可能是一个更好的选择。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python Subprocess库详解
Subprocess库是Python中用于创建和管理子进程的标准库。它提供了一个强大而灵活的接口,使得你可以在Python中启动新的进程、连接它们的输入和输出,并与它们进行交互。本教程将介绍Subprocess库的基本概念、用法和一些常见的应用场景。
Michel_Rolle
2024/02/04
3.1K0
python调用外部命令的四种方式
python提供了几种调用shell的命令,但是每个命令的功能不同,需要详细了解下,才可以比较方便的来应对不同的需求。
陈晨135
2022/01/06
9990
python调用外部命令的四种方式
Python中os.system()、subprocess.run()、call()、check_output()的用法
os.system() 是对 C 语言中 system() 系统函数的封装,允许执行一条命令,并返回退出码(exit code),命令输出的内容会直接打印到屏幕上,无法直接获取。
Python学习者
2023/07/28
1K0
Python调用shell命令常用方法
方法一、使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256表示未找到,该方法适用于shell命令不需要输出内容的场景。
用户7639835
2021/08/26
1.1K0
Python模块之subprocess用法实例详解
subprocess最早在2.4版本引入。用来生成子进程,并可以通过管道连接他们的输入/输出/错误,以及获得他们的返回值。
菲宇
2019/06/13
26.8K0
Python调用Shell命令 (python, shell 混合编程)
Python经常被称作“胶水语言”,因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库,也当然可以用Python调用Shell命令。
Python学习者
2024/04/28
5050
Python模块学习:subprocess模块详解
subprocess是Python 2.4中新增的一个模块,它允许你生成新的进程,连接到它们的 input/output/error 管道,并获取它们的返回(状态)码。这个模块的目的在于替换几个旧的模块和方法,如:
Python学习者
2023/08/26
2.7K0
笔记 | 如何在Python下调用Linux的Shell命令?
昨天应导师要求,需要写很多python脚本在linux下,这样就会用到如何在python下调用linux命令。
zenRRan
2018/12/17
4.9K0
subprocess实用手册
subprocess模块主要用于创建子进程,并连接它们的输入、输出和错误管道,获取它们的返回状态。通俗地说就是通过这个模块,你可以在Python的代码里执行操作系统级别的命令,比如“ipconfig”、“du -sh”等等。
千往
2019/08/07
1.1K0
Python 执行Shell 外部命令
1、os.system() 此方法执行的外部程序,会将结果直接输出到标准输出。os.system的返回结果为执行shell 的 $? 值。 因此请执行没有输出结果的程序时适合使用此方法。如touch
py3study
2020/01/07
1.3K0
两天研习Python基础(五) 执行外部命令
[1]Python标准库: https://docs.python.org/3/library/index.html
王诗翔呀
2020/07/02
1K0
Python 执行系统命令
Python 编程过程中经常会用到系统命令,本文记录实现方法。 系统命令 作为胶水语言,Python可以很方便的执行系统命令,Python3中常用的执行操作系统命令有以下方式 os.system() os.popen() subprocess 模块 os.system 执行命令但无法获取取命令输出时,可以使用 os.system os.system() 是C语言 system() 函数的封装,返回命令的退出状态码,命令执行结果输出到标准输出(stdout/窗口)。 system函数可以将
为为为什么
2022/08/10
2K0
Python之模块介绍
os.makedirs('dirname1/dirname2')  可生成多层递归目录
py3study
2020/01/08
7260
python中执行shell命令的几个方
最近有个需求就是页面上执行shell命令,第一想到的就是os.system, 代码如下:
py3study
2020/01/06
3.2K0
python执行系统命令
在实际开发中,除了编写python自身的代码外,还经常需要执行操作系统的命令。在python3中,推荐使用subprocess模块来执行系统命令,基本用法如下
生信修炼手册
2020/05/14
1.8K0
Python学习之进程和并发
从Python2.4 以后,subprocess模块负责衍生出新的进程,和标准输入,标准输出,标准错误输出交互,并监听返回值。Subprocess模块是用来取代一些老的模块,例如os.system, os.spawn, os.popen和popen2
py3study
2020/01/08
8420
正确的使用python调用shell的姿势
python是一门简洁灵活的语言,也是一门胶水语言,能与很多其他的编程语言进行交互,虽然性能差一点,但易用,入门和上手都比较简单,所以一直以来都被使用广泛。
我是攻城师
2020/04/22
7.7K0
python的subprocess模块
1 os与commands模块 ​ 2 subprocess模块 ​ 3 subprocess.Popen类
py3study
2020/01/07
3.3K0
日拱一卒,麻省理工教你CS基础,那些酷炫无比的命令行工具
今天和大家继续聊聊麻省理工的missing semester,消失的学期,讲解那些不会在课上提及的工具和技术。
TechFlow-承志
2022/09/21
1.7K0
日拱一卒,麻省理工教你CS基础,那些酷炫无比的命令行工具
Python调用Shell命令
前言:在python程序里面难免会用到shell命令,在python调用shell脚本也不是很难,记录了一下! ****通过os模块**** system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果 #os-One #只返回结果 os.system(command) sample import os print os.system("service apache2 status") ---- popen方不仅仅返回结果,还返回一个类文件对象,通过调用该对象的read()或readlines
AlicFeng
2018/06/08
1.4K0
相关推荐
Python Subprocess库详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验