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中调用shell脚本有多种方法,以下为你详细介绍: ### 使用`os.system` `os.system`函数可以直接在Python执行shell命令,若要调用shell脚本,只需将脚本路径作为命令传入即可。 ```python import os # 调用shell脚本 result = os.system("/path/to/your/script.sh") return_code = result >> 8 print(f"脚本执行返回码: {return_code}") ``` 此方法返回值是命令执行后的状态码,高位才是真正的返回码,需右移8位获取[^1]。 ### 使用`subprocess`模块 `subprocess`模块功能更强大,能灵活控制命令的执行和输出。 #### `subprocess.run` ```python import subprocess try: # 调用shell脚本 result = subprocess.run(["/path/to/your/script.sh"], capture_output=True, text=True, check=True) print("脚本输出:") print(result.stdout) except subprocess.CalledProcessError as e: print(f"脚本执行出错,返回码: {e.returncode}") print("错误信息:") print(e.stderr) ``` `subprocess.run`会等待命令执行完毕,`capture_output=True`表示捕获脚本的标准输出和标准错误输出,`text=True`表示以文本形式返回输出,`check=True`表示若命令执行失败(返回非零状态码),则抛出`CalledProcessError`异常。 #### `subprocess.Popen` ```python import subprocess # 调用shell脚本 process = subprocess.Popen(["/path/to/your/script.sh"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) # 获取脚本输出 stdout, stderr = process.communicate() # 获取返回码 return_code = process.returncode print(f"脚本执行返回码: {return_code}") if return_code == 0: print("脚本输出:") print(stdout) else: print("错误信息:") print(stderr) ``` `subprocess.Popen`能以更底层的方式控制命令的执行,可在命令执行过程中与其进行交互。 ### 使用`sh`模块 `sh`模块是一个方便的库,可让在Python中像调用函数一样调用shell命令。首先需安装`sh`模块: ```bash pip install sh ``` ```python import sh try: # 调用shell脚本 output = sh.bash("/path/to/your/script.sh") print("脚本输出:") print(output) except sh.ErrorReturnCode as e: print(f"脚本执行出错,返回码: {e.exit_code}") print("错误信息:") print(e.stderr) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值