通过实例解析python subprocess模块原理及用法

通过实例解析python subprocess模块原理及用法

1. subprocess模块简介

subprocess模块是Python标准库中的一个模块,主要用于创建新进程和与其进行交互(传递数据或获取输出结果)。

subprocess提供了多种创建、运行子进程以及与其进行通讯的方法,包括:
- Popen: 在终端启动一个新的子进程,并链接它的标准输入/输出/错误。
- call: 启动一个新的子进程并等待其执行完毕,可以返回该进程的返回值。
- check_callcheck_output 等方法等。

2. Popen方法使用示例

2.1 运行shell命令并取得输出结果

import subprocess

# 命令执行后的输出流,会输出流的内容作为函数的返回值
output = subprocess.Popen(["ls", "/"], stdout=subprocess.PIPE).communicate()[0]

# 将二进制数据转换成字符串,并打印出来
print(output.decode('utf-8'))

上面的代码执行了 ls / 命令并将其输出结果存储在output中,并通过 communicate() 方法获取其控制台输出。其中 stdout=subprocess.PIPE 部分表示将子进程输出到主进程,然后用 communicate 获取输出流的数据。decode() 方法将二进制输出内容(b"dirname\nfilname\n")转换成可读字符串。

2.2 传递输入并获取结果

import subprocess

# 启动进程并传递参数
process = subprocess.Popen(["cat", "-"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

# 向进程写入数据并获取输出结果
output, error = process.communicate("Hello World!".encode('utf-8'))

# 输出结果
print(output.decode('utf-8'))

上面的代码演示了如何向进程输入数据,并取得输入后的结果。encode()方法将字符串转换成二进制数据。这里以 cat 命令作为示例,将传递的数据打印到控制台。

3. 子进程和主进程的交互

可以通过 communicate() 方法和进程进行交互,communicate() 方法会将子进程的输入、输出、错误管道都关闭,通过子进程的标准输出和错误输出,返回一个以 UTF-8 编码的 (stdout, stderr)元组。

3.1 获取返回值

import subprocess

# 执行命令,将执行结果以异常形式抛出
try:
    # run shell command
    return_code = subprocess.check_call(['ls', '-l'])
    print('子进程返回值:', return_code)
except subprocess.CalledProcessError as e:
    print('执行错误:', e.output)
    print('返回码:', e.returncode)

上述代码示例中,我们使用了 check_call 方法,并通过 return_code 取得了子进程的返回值。如果命令执行失败或者返回值不为0,则会抛出 CalledProcessError 异常。

3.2 直接捕获输出流

import subprocess

# 执行第一个子进程,并将输出通过管道传递给第二个子进程
p1 = subprocess.Popen(["ls"], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["grep", "substring"], stdin=p1.stdout, stdout=subprocess.PIPE)

# 输出第二个进程的结果
print(p2.communicate()[0].decode('utf-8'))

上述代码示例是使用Popen启动两个子进程,第一个子进程获取当前目录的内容,第二个子进程在第一个子进程的输出流中查找一个包含特定字符串(substring)的文件名,并将匹配成功的内容输出到标准输出流。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通过实例解析python subprocess模块原理及用法 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • 详解Python对某地区二手房房价数据分析

    详解Python对某地区二手房房价数据分析 背景介绍 在现代社会中,房地产已成为人们重要的财富和生活方式。通过对某地区二手房房价数据分析,我们可以更好地把握市场趋势,投资策略和生活方式。本文将介绍如何使用Python对某地区二手房房价数据进行分析。 数据获取 首先,需要收集数据进行分析。有很多方式可以获取二手房数据,比如爬虫和第三方提供的数据,但是我们在这里…

    云计算 2023年5月18日
    00
  • python中sys.argv参数用法实例分析

    Python中sys.argv参数用法实例分析 在Python中,可以使用sys.argv模块获取命令行参数。该模块用于从命令行读取参数,这些参数以列表的形式传递给Python脚本。下面是通过sys.argv模块获取命令行参数的基本用法。 命令行输入格式 命令行输入格式如下: python script.py arg1 arg2 arg3 … 其中,sc…

    云计算 2023年5月18日
    00
  • 云计算撑起足球盛宴 阿里云CDN智能调度技术解读

    摘要: FIFA世界杯是4年一届的足球盛宴,全球的足球球迷们不管是真球迷还是泛球迷都乐在其中。今年世界杯很大的一个特色就是移动互联网直播,球迷朋友们可以在赛事期间通过手机、PAD、电视大屏来观看看高清比赛直播,特别是今年的优酷世界杯,大部分的用户对直播的清晰度和流畅度表示满意。 FIFA世界杯是4年一届的足球盛宴,全球的足球球迷们不管是真球迷还是泛球迷都乐在…

    云计算 2023年4月12日
    00
  • Docker Compose 的介绍、安装与使用

    什么是 Docker Compose? Compose 是 Docker 官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在 https://github.com/docker/compose 上。 我们知道使用 Dockerfile 模板文件可以让用户很方便的定义一个单独的应用容器,其实在工作中,经常会碰到需要多个容器相互配合来完成的某项任…

    2023年4月9日
    00
  • 云计算 (转载)

    转载自百度百科(http://baike.baidu.com/view/1316082.htm)  基本原理和概念  云计算(Cloud Computing)是分布式处理(Distributed Computing)、并行处理(Parallel Computing)和网格计算(Grid Computing)的发展,或者说是这些计算机科学概念的商业实现。  云…

    云计算 2023年4月10日
    00
  • IBM SPSS Modeler 18 Premium 中文永久破解版安装教程(破解文件)

    IBM SPSS Modeler 18 Premium 中文永久破解版安装教程(破解文件) 完整攻略 IBM SPSS Modeler 18 Premium 是一款用于数据挖掘、预测分析和决策支持的软件,国内许多用户都需要中文版,但是官方并没有提供中文版,因此有用户会选择破解版。下面我们将分享如何安装和破解 IBM SPSS Modeler 18 Premi…

    云计算 2023年5月18日
    00
  • 计算机中英文网络常用术语对照

    计算机中英文网络常用术语对照 在计算机网络领域,有很多常用的术语,其中一些是英文的。为了更好地理解和使用这些术语,我们需要了解它们的中英文对照。下面是一些常用的计算机中英文网络术语对照表: 中文 英文 网络 Network 服务器 Server 客户端 Client 路由器 Router 防火墙 Firewall 网关 Gateway IP地址 IP Add…

    云计算 2023年5月16日
    00
  • Python实现识别图片内容的方法分析

    下面是“Python实现识别图片内容的方法分析”的完整攻略。 Python实现识别图片内容的方法分析 背景介绍 在实际应用中,很多情况下需要对图片进行识别,例如人脸识别、车牌识别等,这时候就需要借助计算机视觉技术进行处理。Python是当前应用最广泛的计算机视觉编程语言之一,支持多种图像处理库以及AI框架,可以帮助我们快速实现图片处理代码。下面将介绍Pyth…

    云计算 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部