subprocess模块                                                                                                                                      

subprocess模块用于帮助我们在python代码中去执行一些系统命令,在执行python程序时,该模块会创建出一个子进程,来运行外部程序。

该模块拥有多个方法,具体如下:

  • subprocess.call()
    直接打印系统命令的执行结果,如果执行成功,返回状态码为0,否则为1,例如:

#执行成功
import subprocess
CALL1 = subprocess.call('ping 127.0.0.1 -n 1',shell=True)
print("Returncode:%d"%CALL1)

打印结果为:

正在 Ping 127.0.0.1 具有 32 字节的数据:
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128127.0.0.1 的 Ping 统计信息:数据包: 已发送 = 1,已接收 = 1,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):最短 = 0ms,最长 = 0ms,平均 = 0ms
Returncode:0
#执行失败
CALL2 = subprocess.call('ping 1.1.1.2 -n 1',shell=True)
print("Returncode:%d"%CALL2)

打印结果为:

正在 Ping 1.1.1.2 具有 32 字节的数据:
请求超时。1.1.1.2 的 Ping 统计信息:数据包: 已发送 = 1,已接收 = 0,丢失 = 1 (100% 丢失),
Returncode:1
  • subprocess.check_call()
    直接打印系统命令的执行结果,使用方法与subprocess.call()相同,只不过该函数会检测返回状态码,如果为1,则会抛出subprocess.CalledProcessError错误,例如:

import subprocess
# 执行成功
# CHECK_CALL1 = subprocess.check_call('ping 127.0.0.1 -n 1',shell=True)
# print(CHECK_CALL1)
# 执行失败
CHECK_CALL2 = subprocess.check_call('ping 1.1.1.2 -n 1',shell=True)
print(CHECK_CALL2)

打印结果为:

正在 Ping 1.1.1.2 具有 32 字节的数据:
请求超时。1.1.1.2 的 Ping 统计信息:数据包: 已发送 = 1,已接收 = 0,丢失 = 1 (100% 丢失),
Traceback (most recent call last):File "C:/Users/Administrator/PycharmProjects/first/subprocess/check_call.py", line 7, in <module>CHECK_CALL2 = subprocess.check_call('ping 1.1.1.2 -n 1',shell=True)File "C:\Python3.6\lib\subprocess.py", line 291, in check_callraise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command 'ping 1.1.1.2 -n 1' returned non-zero exit status 1.

可以结合try...expect...语句做异常处理。

  • subprocess.check_output()

不会将系统命令的执行结果直接打印出来,返回一个bytes类型的对象,该对象包含了系统命令的执行结果,如果执行失败会抛出subprocess.CalledProcessError错误,例如:

import subprocess
#执行成功
CHECK_OUTPUT1 = subprocess.check_output('ping 127.0.0.1 -n 1',shell=True)
print(type(CHECK_OUTPUT1))
print(str(CHECK_OUTPUT1,'gbk'))

打印结果为:

<class 'bytes'>正在 Ping 127.0.0.1 具有 32 字节的数据:
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128127.0.0.1 的 Ping 统计信息:数据包: 已发送 = 1,已接收 = 1,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):最短 = 0ms,最长 = 0ms,平均 = 0ms
  • subprocess.Popen()

上面几个函数都是Popen()的封装,主进程都会等待子进程执行完毕,Popen()创建的子进程不会被等待,相当于异步执行。

1.Popen()创建的对象有多个方法,可以针对子进程执行个性化操作,例如:

import subprocess
import time
time.clock()
POPEN1 = subprocess.Popen('ping 127.0.0.1 -n 10',shell=True)
print(POPEN1)
print(time.clock())

打印结果为:

<subprocess.Popen object at 0x02230810>
0.06108553745727746
#从时间上看,主程序很快就结束了

Popen()创建的对象方法包括:

POPEN1.poll() # 检查子进程状态
POPEN1.kill() # 终止子进程
POPEN1.terminate() # 终止子进程
POPEN1.send_signal() # 向子进程发送信号
pid属性包含了子进程的pid号

2.subprocess.Popen()另一个常用的功能是文本流控制,对应的"标准输入"、"标准输出"、"标准错误"分别是:

POPEN1.stdin
POPEN1.stdout
POPEN1.stderr

subprocess.PIPE(为文本流提供一个缓存区)作为管道,可以用来连接标准输出和标准输入,例如:

POPEN2 = subprocess.Popen('ping 127.0.0.1 -n 1',shell=True,stdout=subprocess.PIPE)
STDOUT2 = POPEN2.stdout
# print(str(STDOUT2.read(),'gbk'))POPEN3 = subprocess.Popen('findstr 数据包',shell=True,stdin=STDOUT2,stdout=subprocess.PIPE)
STDOUT3 = POPEN3.stdout
print(str(STDOUT3.read(),'gbk'))

执行结果为:

数据包: 已发送 = 1,已接收 = 1,丢失 = 0 (0% 丢失),

转载于:https://blog.51cto.com/fengjicheng/2158183

python模块--subprocess相关推荐

  1. Python基础篇【第6篇】: Python模块subprocess

    Python中可以执行shell命令的相关模块和函数有: os.system os.spawn* os.popen*          --废弃 popen2.*           --废弃 com ...

  2. Python模块subprocess小记

    在熟悉了Qt的QProcess以后,再回头来看python的subprocess总算不觉得像以前那么恐怖了. 和QProcess一样,subprocess的目标是启动一个新的进程并与之进行通讯. su ...

  3. Python模块——subprocess

    subprocess模块 通过Python去执行一条系统命令或脚本. 三种执行命令的方法 subprocess.run(*popenargs, input=None, timeout=None, ch ...

  4. python模块subprocess学习

    subprocess模块介绍 subprocess是python创建子进程的工具,其实和c中的fork出一个子进程,然后在子进程中运行exec执行另外一个进程很类似. subprocess包中有很多方 ...

  5. python子进程模块subprocess

    2019独角兽企业重金招聘Python工程师标准>>> python子进程模块subprocess 目录 一.subprocess 模块简介 1.1. 使用 subprocess模块 ...

  6. python打印字节流_Python 调用系统命令的模块 Subprocess

    有些时候需要调用系统内部的一些命令,或者给某个应用命令传不定参数时可以使用该模块. 初识 Subprocess 模块 Subprocess 模块提供了多个方法来运行额外的进程.在 Python2.7 ...

  7. Python之subprocess模块

    subprocess模块允许你启动一个新的进程,连接输入/输出/错误的管道,  获得子进程的返回码.这个模块目标是代替一些老的模块,比如os.system和os.spawn. 0x01 常见subpr ...

  8. Python的subprocess模块(一)

    原文连接:http://www.cnblogs.com/wang-yc/p/5624880.html 一.简介 subprocess最早在2.4版本引入.用来生成子进程,并可以通过管道连接他们的输入/ ...

  9. 【Python】python之subprocess模块详解

    [Python]python之subprocess模块详解 subprocess模块 subprocess是Python 2.4中新增的一个模块,它允许你生成新的进程,连接到它们的 input/out ...

最新文章

  1. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
  2. 14条建议,使你的IT职业生涯更上一层楼
  3. react 面试题 高级_高级前端面试题目大全(一)
  4. Python处理图像五个有趣场景,很实用!
  5. c# automapper 使用
  6. |Vijos|图论最短路|P1082 丛林冒险
  7. weblogic安装升级配置
  8. 利用LFW对人脸识别模型进行精度评测
  9. android获取网络时间工具类,Android检测网络接口访问速度,ping接口获取访问时间平均值...
  10. 老版本iOS simulator链接
  11. java编码解码工具类
  12. maxon motor 471486电机
  13. vue微信公众号开发h5授权登录
  14. iOS证书(.p12)和描述文件(.mobileprovision)申请
  15. astc纹理压缩格式
  16. 【Vmware的vmdk文件转img文件】
  17. 新版TCGA的突变SNP数据添加临床信息
  18. 【ZT】iSpring Free Cam – 免费易用的「录制屏幕」工具 [Windows]
  19. 使用正则表达式将数值转化为千分位格式
  20. 一个项目的大体架构及想法。

热门文章

  1. linux shell脚本判断文件或文件夹是否存在循环操作
  2. 下载和安装CUDA和Cudnn(图文详解)
  3. xpath抓取html不完全,scrapy的xpath是否取HTML标签的情况分析
  4. html事件绑定的方法,如何获取html元素所绑定的事件
  5. 绘制卡方分布的概率密度函数 matlab,MATLAB如何使用chi2pdf函数计算卡方分布的概率密度...
  6. python 对角阵_numpy创建单位矩阵和对角矩阵的实例
  7. iis html 空白页,IIS伪静态html静态页无法访问的解决方法
  8. gdb 调试_一文入门Linux下gdb调试(二)
  9. textbox内容转为字符串_【公告】整改文章内容
  10. 有计算机考试励志的文案,关于考试的句子励志