一、subprocess标准库

python执行shell脚本,通常会使用so模块中的几个方法,如system、spawn*、popen等。subprocess标准库的引入就是为了取代这些老的模块方法。subprocess使用时,父进程创建子进程去执行一个外部程序,并提供了标准输入输出和管道(pipe)的实现方法。

subprocess.Popen()

subprocess库的一个基础类,下文介绍的subprocess.run、subprocess.call、subprocess.check_call、subprocess.check_output都是在此基础上的封装,若要实现一些复杂的业务流程使用subprocess.Popen()更灵活。

程序运行subprocess.Popen()类,父进程创建子进程后,不会等待子进程执行完成。如果需要等待子进程,需要加入wait()方法阻塞父进程。

示例1

child = subprocess.Popen('ping www.baidu.com')print('End')

示例2

child = subprocess.Popen('ping www.baidu.com')

child.wait()print('End')

以上示例1没有等child 执行完就print,示例2父进程先阻塞,等待child执行完再print。

subprocess.Popen(args, bufsize=-1, executable=None,stdin=None, stdout=None, stderr=None,preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,shell=False, cwd=None, env=None, universal_newlines=False,startupinfo=None, creationflags=0,restore_signals=True, start_new_session=False,pass_fds=(), *, encoding=None, errors=None)

args:shell命令,可以是str类型,或者list和tuple

bufsize:缓冲区

stdin、stdout、stderr:标准输入输出和标准错误日志

subprocess.PIPE:创建Popen对象时,subprocess.PIPE可以初始化stdin、stdout、stderr参数。

标准输出:

importsubprocess

child= subprocess.Popen(['shell','python --version'], stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr=subprocess.PIPE)

shell_out=child.stdout.read()#shell_out = child.communicate() 也可以使用communicate()方法输出

shell_error =child.stderr.read()print(shell_out)print(shell_error)

其他方法:

child.poll() #检查子进程状态

child.kill()#终止子进程

child.send_signal()#向子进程发送信号

child.terminate()#终止子进程

subprocess.run()

subprocess.run()函数是Python3.5中新增的一个高级函数,其返回值是一个subprocess.CompletedPorcess类的实例。

child = subprocess.run('python --version', shell =True)print(child)#CompletedProcess(args='python --version', returncode=0)

subprocess.call()

父进程等待子进程完成

执行成功返回0

执行失败returncode=2,不会主动抛error

child = subprocess.call('python --version', shell =True)print(child)#0

subprocess.check_call()

父进程等待子进程完成

执行成功返回0

returncode不为0,抛出subprocess.CalledProcessError:error信息只有returncode

child = subprocess.check_call('python --version', shell =True)print(child)#0

subprocess.check_output()

父进程等待子进程完成

执行成功返回output信息

returncode不为0,抛出subprocess.CalledProcessError:error信息包含returncode和output信息

child = subprocess.check_output('python --version', shell =True)print(child)#b'Python 3.6.4\r\n'

python subprocess模块_python subprocess模块详解相关推荐

  1. python切片输出_Python语言之详解切片

    本篇文章主要讲述Python语言之详解切片,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. 切片操作就是对list,元组,字符串进行截取操作有了切片操作,很多地方循环就不再需要了 ...

  2. 写python脚本管理_Python 文件管理实例详解

    本文实例讲述了Python 文件管理的方法.分享给大家供大家参考,具体如下: 一.Python中的文件管理 文件管理是很多应用程序的基本功能和重要组成部分.Python可以使文件管理极其简单,特别是和 ...

  3. python中正则表达式_Python中正则表达式详解

    正则表达式是用来简洁表达一组字符串的表达式,本文主要和大家分享Python 中正则表达式知识详解,希望能帮助到大家.操作符说明实例.表示任何单个字符 [ ]字符集,单个字符取值范围[abc]表示a或b ...

  4. python元编程_python元编程详解(3)

    今天转载一片非常精彩的文章供大家欣赏:参考文章链接. python开发者门户一个很好的学习python的网站,大家有时间可以多看看. 下面正式开始今天的内容: 在理解元类之前,你需要先掌握Python ...

  5. python dict下标_Python库collections详解

    collections模块包含了除了内置类型list.dict.tuple之外的容器类型.本文详细介绍了Counter.defaultdict.namedtuple.OrderedDict.Chain ...

  6. python粘性拓展_Python 拓展之详解深拷贝和浅拷贝

    写在之前 在昨天的文章里 (零基础学习 Python 之字典),写字典的方法的时候留了一个小尾巴,那就是 copy() 方法还没讲.一是因为 copy 这个方法比较特殊,不单单是它表面的意思:二是以为 ...

  7. python mysql实例_Python 操作MySQL详解及实例

    使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MySQLdb),PyMySQL和SQLAlchemy. Python-MySQL资格最老,核心由C语言打造, ...

  8. python复数类型转换_Python 复数数据类型详解(complex)[学习 Python 必备基础知识][看此一篇就够了]...

    您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 1 复 ...

  9. python集合输出_Python集合操作方法详解

    集合是无序的,天生不重复的数据组合,它的作用如下: 去重,即:把一个列表变成集合,就去重了 关系测试,即:测试两组集合的交集.并集和差集等 一.集合常用方法总结 二.定义 1.语法 >>& ...

  10. python cmp方法_python cmp函数详解

    cmp( x, y):比较2个对象,前者小于后者返回-1,相等则返回0,大于后者返回1. Python的cmp比较函数比较原理 Python的cmp函数可以比较同类型之间,或者不同数据类型之间.然后根 ...

最新文章

  1. java中字符串后加Box_PDFBox添加多行文档
  2. 栈与队列5——汉诺塔问题(方案二)
  3. Bash Cookbook 学习笔记 【中级】
  4. 真搞不懂这些部门大学为什么要迁户口?
  5. 郁金香商业辅助教程 2016 笔记 6~10
  6. 【自】数据库系统原理(三)——测试总结后,
  7. 一个学习PCI Express的 不错去处
  8. linux 常用脚本
  9. 2019上半年软考试题(转)
  10. C++实验5 游戏玩家类Player、两个道具类Helm和Armor
  11. 郑大网教育计算机2017,郑州大学-“2017中国大学生计算机设计大赛河南省级赛”在郑州大学举行...
  12. 生动化你的表达——DuerOS中的SSML应用
  13. Python中有self和没有self的问题
  14. ESP8266-01S使用教程
  15. 选择企业最合适的人才 —— 谈谈因人设岗与因事设岗
  16. C语言中.c文件与.h文件 的使用
  17. python基于SVM的疫情评论情感数据分析
  18. 语言学习游戏的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 阿朱推荐的产品经理读物30本书(修订版)
  20. SDSC2019【游记】

热门文章

  1. entity framework number类型 oracle,c# – Oracle CHAR数据类型不适用于Entity Framework
  2. JsonRpc源码--处理http请求源码刨析
  3. 必备,2013驾考新规常识及“通关秘籍”
  4. 软文写作技巧之三要素
  5. 中国科学院大学-随机过程(孙应飞老师)
  6. matlab偏微分方程数值解误差_Python数值计算----------求解简单的偏微分方程
  7. (无刀流 龙卷风)科来网络分析系统免费版下载
  8. 美团面试,问了ThreadLocal原理,这个回答让我通过了
  9. 证书格式区别 pvk spc cer
  10. 【超图+CESIUM】【基础API使用示例】22、超图|CESIUM - 标绘面:Cesium.DrawHandler绘制面Cesium.DrawMode.Polygon