【python】subprocess用法示例

本文讲解了Pythonsubprocess模块在执行系统命令、捕获输出、环境变量管理及错误处理中的应用,涵盖git、C编译、克隆仓库和Python版本检查等场景。
摘要由CSDN通过智能技术生成

当然,下面是一些使用 Python subprocess 模块的示例:

1. 运行命令并捕获输出

import subprocess
# 运行 'ls' 命令并捕获输出
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
# 获取命令的输出和错误信息
output = result.stdout
error = result.stderr
print("输出:", output)
if error:
    print("错误:", error)

2. 检查命令是否成功执行

import subprocess
# 检查 'ls' 命令是否成功执行
try:
    result = subprocess.check_call(['ls', 'nonexistent_file'])
    print("命令成功执行")
except subprocess.CalledProcessError as e:
    print("命令执行错误,退出状态码:", e.returncode)

3. 运行命令并捕获输出,同时发送输出到控制台

import subprocess
# 运行 'ls' 命令,将输出直接打印到控制台
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, check=True)
print(result.stdout)

4. 使用 Popen 类

import subprocess
# 使用 Popen 类运行 'ls' 命令
p = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
output, error = p.communicate()
print("输出:", output)
if error:
    print("错误:", error)

5. 发送输入到命令

import subprocess
# 运行 'cat' 命令,并发送输入 'Hello, World!'
p = subprocess.Popen(['cat'], stdin=subprocess.PIPE, text=True)
p.communicate(input='Hello, World!')

6. 捕获环境和返回码

import subprocess
# 运行 'ls' 命令,并捕获环境变量和返回码
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, env={'MY_ENV_VAR': '123'})
print("退出状态码:", result.returncode)
print("环境变量:", result.env)

这些示例展示了 subprocess 模块的一些基本用法。您可以根据需要调整命令、输入、输出和错误处理方式。
当然,这里有一些其他使用 subprocess 模块的示例:

7. 调用 git 命令

import subprocess
# 获取当前分支名
try:
    branch = subprocess.check_output(['git', 'rev-parse', '--abbreviate', '--current', 'HEAD'],
                                     stderr=subprocess.STDOUT, text=True).strip()
    print(f"当前分支: {branch}")
except subprocess.CalledProcessError as e:
    print(f"无法获取分支信息:{e.output}")

8. 编译 C 代码

import subprocess
# 编译 C 代码
try:
    compile_result = subprocess.check_call(['gcc', '-o', 'program', 'program.c'],
                                           stderr=subprocess.STDOUT, text=True)
    print(f"编译成功,退出状态码:{compile_result}")
except subprocess.CalledProcessError as e:
    print(f"编译失败:{e.output}")

9. 克隆 Git 仓库

import subprocess
# 克隆 Git 仓库
try:
    clone_result = subprocess.check_output(['git', 'clone', 'https://github.com/user/repo.git'],
                                           stderr=subprocess.STDOUT, text=True)
    print(f"克隆成功:{clone_result}")
except subprocess.CalledProcessError as e:
    print(f"克隆失败:{e.output}")

10. 检查 Python 环境

import subprocess
# 检查 Python 环境
try:
    py_version = subprocess.check_output(['python', '--version'],
                                         stderr=subprocess.STDOUT, text=True).strip()
    print(f"Python 版本:{py_version}")
except subprocess.CalledProcessError as e:
    print(f"无法检查 Python 版本:{e.output}")

11. 使用管道

import subprocess
# 使用管道将一个命令的输出作为另一个命令的输入
result = subprocess.run(['wc', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
file_count = int(result.stdout.strip())
try:
    git_status = subprocess.check_output(['git', 'status'], stdin=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
    print(f"文件数:{file_count}")
    print(f"Git 状态:{git_status}")
except subprocess.CalledProcessError as e:
    print(f"命令执行错误:{e.output}")

12. 捕获实时输出

import subprocess
# 运行一个命令,并实时捕获输出
process = subprocess.Popen(['tail', '-f', '/var/log/syslog'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
while True:
    line = process.stdout.readline()
    if line == '' and process.poll() is not None:
        break
    if line:
        print(line.strip())
# 等待进程结束
process.wait()

这些示例展示了 subprocess 模块在不同场景下的应用,包括调用系统工具、编译代码、克隆仓库、检查 Python 版本、使用管道以及实时捕获命令输出。根据您的具体需求,可以调整命令、输入、输出和错误处理方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔都吴所谓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值