Python subprocess模块进阶:从基础调用到进程间通信

晚来风
晚来风
发布时间:2026-10-13| 7人浏览过
原创

本文深入解析Python标准库subprocess模块,旨在替代旧的os.system等方法。详细讲解call()执行命令、check_output()获取结果以及Popen类进行复杂进程交互的使用方法。通过代码示例展示如何控制子进程等待、重定向标准输出及利用管道实现进程间文本通信,帮助开发者高效管理外部程序。

介绍

引入subprocess模块的核心目的在于替代os.system等较为陈旧且功能受限的模块与方法。

在Python环境中运行脚本时,系统实际上是在创建并运行一个独立的进程。类似于Linux操作系统中的机制,一个父进程可以fork(派生)出一个子进程,并让该子进程exec(执行)另一个外部程序。在Python中,我们可以借助标准库提供的subprocess包来fork子进程,进而运行外部程序。

subprocess包内定义了多个用于创建子进程的函数,它们以不同的策略创建子进程,因此用户可以根据具体需求选择最合适的函数。此外,subprocess还提供了管理标准流(standard stream)和管道(pipe)的工具,使得进程间能够通过文本进行通信。

导入模块

>>> import subprocess

命令执行call()

该函数用于执行由参数提供的命令,并将数组作为参数传入以运行命令。其功能与os.system(cmd)类似。

>>> subprocess.call(['ls','-l')

其中,参数shell的默认值为False。

当将shell参数设置为True时,可以直接传递字符串形式的命令:

>>> subprocess.call('ls -l',shell=True)

获得返回结果check_output()

由于call()函数不返回命令执行的显示结果,若需获取输出内容,可以使用check_output()函数:

>>> result = subprocess.check_output(['ls','-l'],shell=True)
>>> result.decode('utf-8')

进程创建和管理Popen类

subprocess.Popen类用于替代os.popen。通过创建Popen类的实例,可以创建子进程并进行复杂的交互操作。

创建不等待的子进程

import subprocess

child = subprocess.Popen(['ping','-c','4','www.baidu.com'])
print('Finished')

添加子进程等待机制

import subprocess

child = subprocess.Popen(['ping','-c','4','www.baidu.com'])
child.wait() # 等待子进程结束
print('Finished')

调用wait()方法后,主进程会阻塞并等待子进程执行完毕,随后再继续执行后续语句。

子进程文本流控制

标准输出重定向示例:

import subprocess

child = subprocess.Popen(['ls','-l'],stdout=subprocess.PIPE)    #将标准输出定向输出到subprocess.PIPE
print(child.stdout.read()) 

结合stdin使用示例:

import subprocess

child1 = subprocess.Popen(['cat','/etc/passwd'],stdout=subprocess.PIPE)
child2 = subprocess.Popen(['grep','root'],stdin=child1.stdout,stdout=subprocess.PIPE)

print child2.communicate()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。