python中subprocess实例用法及知识点详解
作者:小妮浅浅 发布时间:2022-12-03 00:27:39
1、subprocess这个模块来产生子进程,并且可以连接到子进程的标准输入、输出、错误中,还可以获得子进程的返回值。
2、subprocess提供了2种方法调用子程序。
实例
# 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包来fork一个子进程,并运行一个外部的程序。
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_ouput()来获得返回的结果:
>>> 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()
来源:https://www.py.cn/jishu/jichu/34069.html
猜你喜欢
- 我最新最全的文章都在 南瓜慢说 www.pkslow.com ,欢迎大家来喝茶!1 数据库审计数据库审计是指当数据库有记录变更时,可以记录数
- 本文实例讲述了python实现的简单FTP上传下载文件的方法。分享给大家供大家参考。具体如下:python本身自带一个FTP模块,可以实现上
- 今天学到了如何使用Python的smtplib库发送邮件,中间也是遇到了各种各样的错误和困难,还好都一一的解决了。下面来谈一谈我的这段经历。
- 前言在一个分布式环境中,每台机器上可能需要启动和停止多个进程,使用命令行方式一个一个手动启动和停止非常麻烦,而且查看每个进程的状态也很不方便
- 什么是组播点对点连接可以处理很多通信需求,不过随着直接连接数的增加,在多对通信方之间传递相同的消息会变得越来越困难。单独地向各个接收方发送消
- 以前写点小程序其实根本不在乎并行,单核跑跑也没什么问题,而且我的电脑也只有双核四个超线程(下面就统称核好了),觉得去折腾并行没啥意义(除非在
- xlsxwriter可能用过的人并不是很多,不过使用后就会感觉,他的功能让你叹服,除了可以按要求生成你所需要的excel外还可以加上很形象的
- 安装的依赖包flaskpymysqlflask_scriptflask_migrateflask_sqlalchemy创建Flask项目(项
- 问题描述 windows错误安装方法:pip3 install numpy这种情况下虽然安装成功,但是在import numpy时会出现如下
- 本文实例讲述了Python实现的最近最少使用算法。分享给大家供大家参考。具体如下:# lrucache.py -- a simple LRU
- 这主要是写给我自己的,防止以后入坑,耗费时间。本文主要谈的是怎样安装Python解释器和Python开发工具PyCharm。 本机系统
- 1.列表Stepping这是一个 step 参数,可以通过采取几个步骤来分割你的列表。此外,你可以使用 step 参数来反转整数。看看下面的
- 本文转自微信公众号:"算法与编程之美",一、问题描述在collections模块中的defauldict使用时与dict
- 今天我在练习python时,对字典里的键用sorted排序时发现并没有按照预期排序研究后发现字母大小写会影响排序首先创建一个字典,键里面的首
- 如下所示:import datetimet1 = datetime.datetime.strptime("2017-9-06 10
- 阅读上一篇:javascript面向对象编程(一)[javascript模拟传统OOP]javascript是一种非常灵活的语言,它的灵活度
- 继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。回忆一下Animal类层次的设计,假设我们要实现以下4种动物:&
- 1. Min.us: 上传图片的最简单方任何开发人员、设计师、网络管理员都必须跟客户和同事在线分享图片。Min.us的全部服务就是让你极度简
- 目录信号:官方介绍:blinker 使用命名信号匿名信号组播信号接收方订阅主题装饰器用法可订阅主题的装饰器检查信号是否有接收者检查订阅者是否
- 本文的主要内容是向大家分享几个Python面试中的T题目,同时给出了答案并对其进行分析,具体如下。本文的原文是5 Great Python