关于subprocess子进程的communicate函数

2020年2月1日 / 12次阅读 / Last Modified 2020年2月1日
subprocess模块

我觉得现在才真正想清楚subprocess子进程的communicate函数的含义。要使用communicate函数,必须要用Popen来创建子进程。

Popen以异步的方式创建子进程,创建时可以设定stdin,stdout和stderr全部指向PIPE,此时子进程的输入输出全部都在管道中,就像我们再shell命令行直接使用管道(|)一样!

我们在使用管道(|)连接多个程序的时候,前一个程序的输出成为了后一个程序的输入,此时如果假设后一个程序时通过subprocess的Popen创建的,那么此时此子进程的stdin,就是前一个程序的输出,而它的stdout和stderr,通过communicate函数,可以直接获得!

我想说的一个关键点是:通过子进程的communicate函数,我们可以像使用shell的管道一样,直接连接多个程序的输入和输出;但是,这种输入和输出,也跟shell管道一样,是一次性的;即如果某个程序有运行时会连续多次获取输入,communicate就无能为力(此时就要使用pexpect)。

communicate函数是管道!因此,用管道连接多个程序,就需要多次使用Popen创建子进程(stdin,stdout和stderr都要等于PIPE),并将后一个程序的stdin设置为前一个程序的stdout。

搞清楚communicate函数之后,再做软件结构设计时,就更清晰了!

-- EOF --

本文链接:https://www.pynote.net/archives/1775

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top