Python执行Shell命令并获取结果:深入解析与实战

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。

Python执行Shell命令并获取结果:深入解析与实战

Python可以通过多种方式执行Shell命令并获取结果,常用的方式包括 subprocess模块。subprocess模块允许你生成新的进程,连接它们的输入/输出/错误管道,并获取它们的返回码。本指南将深入解析如何使用Python执行Shell命令,并提供一些实战示例。

一、subprocess模块简介

subprocess模块提供了强大的进程创建接口和与进程交互的功能。常用的方法有:

  • subprocess.run()
  • subprocess.Popen()
  • subprocess.check_output()
1. subprocess.run()

subprocess.run()是Python 3.5中引入的,推荐用于大多数情况下的Shell命令执行。

import subprocess

result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
​
AI 代码解读
2. subprocess.Popen()

subprocess.Popen()提供更强大的功能,可以与子进程进行更细粒度的交互。

import subprocess

process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
stdout, stderr = process.communicate()
print(stdout)
​
AI 代码解读
3. subprocess.check_output()

subprocess.check_output()用于执行命令并获取输出,如果命令返回非零值会抛出异常。

import subprocess

output = subprocess.check_output(['ls', '-l'], text=True)
print(output)
​
AI 代码解读

二、深入解析与实战

1. 基本命令执行

使用 subprocess.run()执行基本命令,并捕获输出和错误信息。

import subprocess

def execute_command(command):
    try:
        result = subprocess.run(command, capture_output=True, text=True, check=True)
        return result.stdout
    except subprocess.CalledProcessError as e:
        return f"Error: {e.stderr}"

output = execute_command(['ls', '-l'])
print(output)
​
AI 代码解读
2. 处理长时间运行的命令

使用 subprocess.Popen()处理长时间运行的命令,并实时获取输出。

import subprocess

def execute_long_running_command(command):
    process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    for stdout_line in iter(process.stdout.readline, ""):
        print(stdout_line, end="")  # 实时输出
    process.stdout.close()
    process.wait()
    return process.returncode

return_code = execute_long_running_command(['ping', 'google.com', '-c', '4'])
print(f"Command finished with return code: {return_code}")
​
AI 代码解读
3. 使用Shell模式执行命令

有时需要通过Shell执行命令,这时可以使用 shell=True参数。

import subprocess

def execute_shell_command(command):
    result = subprocess.run(command, shell=True, capture_output=True, text=True)
    return result.stdout

output = execute_shell_command('ls -l | grep py')
print(output)
​
AI 代码解读
4. 捕获标准输出和标准错误

同时捕获标准输出和标准错误,并处理错误信息。

import subprocess

def execute_command_with_error_handling(command):
    try:
        result = subprocess.run(command, capture_output=True, text=True, check=True)
        return result.stdout
    except subprocess.CalledProcessError as e:
        return f"Error: {e.stderr}"

output = execute_command_with_error_handling(['ls', '-l', '/nonexistent'])
print(output)
​
AI 代码解读
5. 设置命令超时

可以设置命令的执行超时,避免长时间挂起。

import subprocess

def execute_command_with_timeout(command, timeout):
    try:
        result = subprocess.run(command, capture_output=True, text=True, timeout=timeout)
        return result.stdout
    except subprocess.TimeoutExpired as e:
        return "Error: Command timed out"

output = execute_command_with_timeout(['sleep', '5'], timeout=2)
print(output)
​
AI 代码解读

三、实战示例

示例1:获取系统信息

import subprocess

def get_system_info():
    uname = subprocess.run(['uname', '-a'], capture_output=True, text=True)
    return uname.stdout

print(get_system_info())
​
AI 代码解读

示例2:检查网络连通性

import subprocess

def ping_host(host):
    command = ['ping', '-c', '4', host]
    result = subprocess.run(command, capture_output=True, text=True)
    if result.returncode == 0:
        return f"Host {host} is reachable."
    else:
        return f"Host {host} is not reachable."

print(ping_host('google.com'))
​
AI 代码解读

示例3:备份数据库

import subprocess

def backup_database(db_name, backup_path):
    command = f"pg_dump {db_name} > {backup_path}"
    result = subprocess.run(command, shell=True, capture_output=True, text=True)
    if result.returncode == 0:
        return "Database backup successful."
    else:
        return f"Database backup failed: {result.stderr}"

print(backup_database('mydatabase', '/path/to/backup.sql'))
​
AI 代码解读

四、总结

通过Python的 subprocess模块,可以灵活地执行Shell命令并获取结果,从而实现系统信息获取、网络连通性检查、数据库备份等自动化任务。结合实际需求和场景,选择合适的 subprocess方法,能显著提高开发和运维效率。

思维导图

+------------------------------------------------------+
|          Python执行Shell命令并获取结果                |
+------------------------------------------------------+
           |
           +-----------------------------+
           | 一、subprocess模块简介        |
           | 1. subprocess.run()          |
           | 2. subprocess.Popen()        |
           | 3. subprocess.check_output() |
           +-----------------------------+
           |
           +-----------------------------+
           | 二、深入解析与实战            |
           | 1. 基本命令执行              |
           | 2. 处理长时间运行的命令      |
           | 3. 使用Shell模式执行命令     |
           | 4. 捕获标准输出和标准错误    |
           | 5. 设置命令超时              |
           +-----------------------------+
           |
           +-----------------------------+
           | 三、实战示例                 |
           | 1. 获取系统信息              |
           | 2. 检查网络连通性            |
           | 3. 备份数据库                |
           +-----------------------------+
           |
           +-----------------------------+
           | 四、总结                    |
           +-----------------------------+
​
AI 代码解读

通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。

目录
打赏
0
20
20
2
448
分享
相关文章
深入解析:使用 Python 爬虫获取淘宝店铺所有商品接口
本文介绍如何使用Python结合淘宝开放平台API获取指定店铺所有商品数据。首先需注册淘宝开放平台账号、创建应用并获取API密钥,申请接口权限。接着,通过构建请求、生成签名、调用接口(如`taobao.items.search`和`taobao.item.get`)及处理响应,实现数据抓取。代码示例展示了分页处理和错误处理方法,并强调了调用频率限制、数据安全等注意事项。此技能对开发者和数据分析师极具价值。
HarmonyOS Next~鸿蒙应用框架开发实战:Ability Kit与Accessibility Kit深度解析
本书深入解析HarmonyOS应用框架开发,聚焦Ability Kit与Accessibility Kit两大核心组件。Ability Kit通过FA/PA双引擎架构实现跨设备协同,支持分布式能力开发;Accessibility Kit提供无障碍服务构建方案,优化用户体验。内容涵盖设计理念、实践案例、调试优化及未来演进方向,助力开发者打造高效、包容的分布式应用,体现HarmonyOS生态价值。
64 27
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
JSON数据解析实战:从嵌套结构到结构化表格
可穿戴设备如何重塑医疗健康:技术解析与应用实战
可穿戴设备如何重塑医疗健康:技术解析与应用实战
36 4
Java机器学习实战:基于DJL框架的手写数字识别全解析
在人工智能蓬勃发展的今天,Python凭借丰富的生态库(如TensorFlow、PyTorch)成为AI开发的首选语言。但Java作为企业级应用的基石,其在生产环境部署、性能优化和工程化方面的优势不容忽视。DJL(Deep Java Library)的出现完美填补了Java在深度学习领域的空白,它提供了一套统一的API,允许开发者无缝对接主流深度学习框架,将AI模型高效部署到Java生态中。本文将通过手写数字识别的完整流程,深入解析DJL框架的核心机制与应用实践。
31 2
【实战解析】smallredbook.item_get_video API:小红书视频数据获取与电商应用指南
本文介绍小红书官方API——`smallredbook.item_get_video`的功能与使用方法。该接口可获取笔记视频详情,包括无水印直链、封面图、时长、文本描述、标签及互动数据等,并支持电商场景分析。调用需提供`key`、`secret`和`num_iid`参数,返回字段涵盖视频链接、标题、标签及用户信息等。同时,文章提供了电商实战技巧,如竞品监控与个性化推荐,并列出合规注意事项及替代方案对比。最后解答了常见问题,如笔记ID获取与视频链接时效性等。
基于Python的情感分析与情绪识别技术深度解析
本文探讨了基于Python的情感分析与情绪识别技术,涵盖基础概念、实现方法及工业应用。文中区分了情感分析与情绪识别的核心差异,阐述了从词典法到深度学习的技术演进,并通过具体代码展示了Transformers架构在细粒度情感分析中的应用,以及多模态情绪识别框架的设计。此外,还介绍了电商评论分析系统的构建与优化策略,包括领域自适应训练和集成学习等方法。未来,随着深度学习和多模态数据的发展,该技术将更加智能与精准。
47 0
GraphQL开发工具选型指南:Apipost高效调试与文档生成实战解析
本文深入解析了GraphQL开发工具Apipost在高效调试与文档生成方面的优势,对比同类工具Apifox,突出其可视化界面、实时调试及自动化文档生成等特性。Apipost通过智能代码补全、错误提示等功能简化复杂Query编写,支持一键生成标准化文档,显著提升开发效率和团队协作效果,尤其适合中大型团队应对复杂业务场景。
Python爬取某云热歌榜:解析动态加载的歌曲数据
Python爬取某云热歌榜:解析动态加载的歌曲数据
|
10月前
|
4:Bash shell命令-步入Linux的现代方法
4:Bash shell命令-步入Linux的现代方法
134 0