python模块系列之
来源:互联网 发布:tcl集团的营销网络 编辑:程序博客网 时间:2024/06/06 04:26
版权声明:本文为博主原创文章,可以转载,但得注明出处。更多精彩文章请关注微信公众号:gloryroadtrain
目录(?)[+]
在学习这个模块前,我们先用Python的help()函数查看一下subprocess模块是干嘛的:
- 1
- 2
- 3
即允许你去创建一个新的进程让其执行另外的程序,并与它进行通信,获取标准的输入、标准输出、标准错误以及返回码等。
注意:使用这个模块之前要先引入该模块。
Popen类
subprocess模块中定义了一个Popen类,通过它可以来创建进程,并与其进行复杂的交互。查看一下它的构造函数:
- 1
- 2
- 3
- 4
- 5
主要参数说明:
args:args should be a string, or a sequence of program arguments.也就是说必须是一个字符串或者序列类型(如:字符串、list、元组),用于指定进程的可执行文件及其参数。如果是一个序列类型参数,则序列的第一个元素通常都必须是一个可执行文件的路径。当然也可以使用executeable参数来指定可执行文件的路径。
stdin,stdout,stderr:分别表示程序的标准输入、标准输出、标准错误。有效的值可以是PIPE,存在的文件描述符,存在的文件对象或None,如果为None需从父进程继承过来,stdout可以是PIPE,表示对子进程创建一个管道,stderr可以是STDOUT,表示标准错误数据应该从应用程序中捕获并作为标准输出流stdout的文件句柄。
shell:如果这个参数被设置为True,程序将通过shell来执行。
env:它描述的是子进程的环境变量。如果为None,子进程的环境变量将从父进程继承而来。
创建Popen类的实例对象
- 1
cmd:标准像子进程传入需要执行的shell命令,如:ls -al
subprocess.PIPE:在创建Popen对象时,subprocess.PIPE可以初始化为stdin, stdout或stderr的参数,表示与子进程通信的标准输入流,标准输出流以及标准错误。
subprocess.STDOUT:作为Popen对象的stderr的参数,表示将标准错误通过标准输出流输出。
Popen类拥有的方法及属性
1、Popen.pid
获取子进程的进程ID。
2、Popen.returncode
获取进程的返回码。如果进程未结束,将返回None。
3、communicate(input=None)
官方解释:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
与子进程进行交互,像stdin发送数据,并从stdout和stderr读出数据存在一个tuple中并返回。
参数input应该是一个发送给子进程的字符串,如果未指定数据,将传入None。
4、poll()
检查子进程是否结束,并返回returncode属性。
5、wait()
- 1
等待子进程执行结束,并返回returncode属性,如果为0表示执行成功。
6、send_signal( sig)
- 1
发送信号给子进程。
7、terminate()
- 1
终止子进程。windows下将调用Windows API TerminateProcess()来结束子进程。
8、kill()
官方文档对这个函数的解释跟terminate()是一样的,表示杀死子进程。
进程通信实例1
打开一个只有ip地址的文本文件,读取其中的ip,然后进行ping操作,并将ping结果写入ping.txt文件中。
首先创建一个子进程res,传入要执行的shell命令,并获得标准输出流、返回码等。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
执行结果:
进程通信实例2
命令交互,不断从键盘接受命令执行,给出执行结果,直到用户输入exit或者bye退出命令交互。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
在Windows上也可以使用os.system()这个函数来执行一些dos命令,但是这个命令只能拿到返回码,拿不到标准输出,标准错误,所以通常使用的subprocess模块中的Popen类来实现。
- python模块系列之
- python模块系列之
- python模块系列之
- python模块系列之
- python模块系列之 - copy
- python模块系列之 - re
- python模块系列之 - xml
- python模块系列之 - configparser
- python模块系列之 - subprocess
- python模块系列之 - configparser
- python模块系列之-logging
- python模块系列之-sys
- python模块系列之-re
- python模块系列之-urllib2
- python学习系列之OS模块介绍
- python模块系列之 - time,datetime,calendar
- python模块系列(四)之文件目录
- Python爬虫Requests模块系列之六
- Android Studio发布项目到jcenter,一行代码引入Module
- python里并发执行协程时部分阻塞超时怎么办
- 图像算法 -- 最全混合图层算法(附源码)
- eclipse+pydev中文乱码
- UltraEdit搭建Python IDE环境+设置快捷键
- python模块系列之
- Spring Data jpa异常: Could not determine type for: java.util.List
- 分享几个前端干货,面试经常提
- 四一、js判断移动端及浏览器内核
- Zabbix监控Mysql5.5主从同步
- 区块链简单解释
- VS2013中安装配置和使用Boost库
- Java 并发工具包 java.util.concurrent 用户指南
- java设计模式之装饰器模式