python中执行shell脚本之subprocess模块

一. 最近subprocess使用背景和介绍

    因为最近领导要求,在Python端调用大数据的shell脚本,所以需要用到Python来执行shell脚本, 因此需要查看下subprocess模块文档。

    根据官网文档描述:subprocess模块用于创建子进程, 这个模块用于替换旧版本中的一些模块, 如:os.system, 

    os.spawn*, os.popen*, os.popen*, popen2.*, commands.*, subprocess允许你能创建很多子进程, 创建的时候能能指定子进程和子进程的输入、输出、错误输出管道, 执行后能获取输出结果和执行状态。

二. subprocess模块的常用方法用法介绍

     subprocess.run()   --> python3.5中新增的函数, 执行指定的命令, 等待命令执行完成后返回一个包含执行结果的                CompletedProcess类的实例。

     subprocess.call():   --> 执行指定的命令, 返回命令执行状态, 功能类似羽os.system(cmd)

     subprocess.check_call():  -->  python2.5中新增的函数, 执行指定的命令, 如果执行成功则返回状态码, 否则抛出异常。

   【Tips】: 在python3.5之后的版本中, 官方文档中提倡通过subprocess.run()函数替代其他函数来使用subprocess模块的功能。在python3.5之前的版本中, 我们可以通过subprocess.call()来使用subproce

Python 的 `subprocess` 模块提供了多种方法来执行 shell 脚本,以下是几种常见的方法: ### 使用 `subprocess.run()` `subprocess.run()` 是 Python 3.5 及以上版本推荐使用的方法,它会等待命令执行完成并返回一个 `CompletedProcess` 对象,包含命令的执行结果。 ```python import subprocess try: result = subprocess.run(['sh', 'your_script.sh'], capture_output=True, text=True, check=True) print("标准输出:", result.stdout) except subprocess.CalledProcessError as e: print("执行错误:", e.stderr) ``` 在上述代码中,`capture_output=True` 表示捕获标准输出和标准错误,`text=True` 表示以文本模式返回输出,`check=True` 表示如果命令执行失败(返回非零退出状态),则抛出 `CalledProcessError` 异常。 ### 使用 `subprocess.Popen()` `subprocess.Popen()` 是一个更底层的方法,它允许你在命令执行过程中与子进程进行交互。 ```python import subprocess command = ['sh', 'your_script.sh'] process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) stdout, stderr = process.communicate() if process.returncode == 0: print("标准输出:", stdout) else: print("执行错误:", stderr) ``` `communicate()` 方法会等待子进程结束,并返回标准输出和标准错误。 ### 使用 `subprocess.check_call()` `subprocess.check_call()` 会执行命令并等待其完成,如果命令返回非零退出状态,则抛出 `CalledProcessError` 异常。 ```python import subprocess try: subprocess.check_call(['sh', 'your_script.sh']) print("脚本执行成功") except subprocess.CalledProcessError as e: print("执行错误:", e) ``` ### 使用 `subprocess.check_output()` `subprocess.check_output()` 会执行命令并返回其标准输出,如果命令返回非零退出状态,则抛出 `CalledProcessError` 异常。 ```python import subprocess try: output = subprocess.check_output(['sh', 'your_script.sh'], text=True) print("标准输出:", output) except subprocess.CalledProcessError as e: print("执行错误:", e.stderr) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值