Python subprocess模块详解:从基础用法到进程管理

宋时安
宋时安
发布时间:2026-10-14 | 5人浏览过
原创

本文深入解析Python中subprocess模块的核心用法。详细讲解如何通过call()执行命令、check_output()获取输出,以及利用Popen类进行复杂的进程创建与交互。内容涵盖标准输入输出重定向、管道通信及进程等待机制,帮助开发者高效管理外部程序。

subprocess模块用于创建子进程,并允许程序与子进程的标准输入、输出及错误流进行交互,同时能够获取子进程的退出状态码。

该模块提供了两种主要方式来调用外部子程序。

具体代码示例如下所示。


# coding:utf-8
import os
# popen返回文件对象,同open操作一样
f = os.popen(r"ls", "r")
l = f.read()
print(l)
f.close()

关于Python subprocess模块的更多知识扩展。

引入subprocess模块的主要目的是替代os.system等较旧的模块和方法,以提供更安全和灵活的控制能力。

运行Python脚本时,本质上是在创建并运行一个进程。类似于Linux系统中的fork操作,一个进程可以派生出一个子进程,并通过exec执行另一个程序。在Python标准库中,我们使用subprocess包来派生子进程并运行外部程序。

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中subprocess实例用法及知识点的详解介绍完毕。如需了解更多相关用法,请搜索本站历史文章或继续阅读后续内容,感谢支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表