python subprocess获取shell输出信息

本文介绍了一个使用Python的subprocess模块从一个脚本调用另一个脚本的例子。通过main.py文件调用script.py,演示了如何获取被调用脚本的状态和输出。

script.py

print("This is script.py!")

main.py

import subprocess
if __name__=="__main__":
	(status, output) =subprocess.getstatusoutput('../script.py')#script.py文件的绝对路径
    print("status",status)#1表示执行失败,0表示执行成功
    print("output",output)#输出的结果(程序的输出或报错)
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) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值