python进程类subprocess的一些操作方法例子


Posted in Python onNovember 22, 2014

subprocess.Popen用来创建子进程。

1)Popen启动新的进程与父进程并行执行,默认父进程不等待新进程结束。

def TestPopen():

  import subprocess

  p=subprocess.Popen("dir",shell=True)

  for i in range(250) :

    print ("other things")

2)p.wait函数使得父进程等待新创建的进程运行结束,然后再继续父进程的其他任务。且此时可以在p.returncode中得到新进程的返回值。

def TestWait():

  import subprocess

  import datetime

  print (datetime.datetime.now())

  p=subprocess.Popen("sleep 10",shell=True)

  p.wait()

  print (p.returncode)

  print (datetime.datetime.now())

3) p.poll函数可以用来检测新创建的进程是否结束。

def TestPoll():

  import subprocess

  import datetime

  import time

  print (datetime.datetime.now())

  p=subprocess.Popen("sleep 10",shell=True)

  t = 1

  while(t <= 5):

    time.sleep(1)

    p.poll()

    print (p.returncode)

    t+=1

  print (datetime.datetime.now())

4) p.kill或p.terminate用来结束创建的新进程,在windows系统上相当于调用TerminateProcess(),在posix系统上相当于发送信号SIGTERM和SIGKILL。

def TestKillAndTerminate():

    p=subprocess.Popen("notepad.exe")

    t = 1

    while(t <= 5):

      time.sleep(1)

      t +=1

    p.kill()

    #p.terminate()

    print ("new process was killed")

5) p.communicate可以与新进程交互,但是必须要在popen构造时候将管道重定向。

def TestCommunicate():

  import subprocess

  cmd = "dir"

  p=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

  (stdoutdata, stderrdata) = p.communicate()

  

  if p.returncode != 0:

        print (cmd + "error !")

  #defaultly the return stdoutdata is bytes, need convert to str and utf8

  for r in str(stdoutdata,encoding='utf8' ).split("\n"):

    print (r)

  print (p.returncode)


def TestCommunicate2():

  import subprocess

  cmd = "dir"

  #universal_newlines=True, it means by text way to open stdout and stderr

  p = subprocess.Popen(cmd, shell=True, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

  curline = p.stdout.readline()
  while(curline != ""):

        print (curline)

        curline = p.stdout.readline()

  p.wait()

  print (p.returncode)

6) call函数可以认为是对popen和wait的分装,直接对call函数传入要执行的命令行,将命令行的退出code返回。

def TestCall():

  retcode = subprocess.call("c:\\test.bat")

  print (retcode)

7)subprocess.getoutput 和 subprocess.getstatusoutput ,基本上等价于subprocess.call函数,但是可以返回output,或者同时返回退出code和output。

但是可惜的是好像不能在windows平台使用,在windows上有如下错误:'{' is not recognized as an internal or external command, operable program or batch file.

def TestGetOutput():

  outp = subprocess.getoutput("ls -la")

  print (outp)
def TestGetStatusOutput():

  (status, outp) = subprocess.getstatusoutput('ls -la')

  print (status)

  print (outp)

8)总结

popen的参数,第一个为字符串(或者也可以为多个非命名的参数),表示你要执行的命令和命令的参数;后面的均为命名参数;shell=True,表示你前面的传入的命令将在shell下执行,如果你的命令是个可执行文件或bat,不需要指定此参数;stdout=subprocess.PIPE用来将新进程的输出重定向,stderr=subprocess.STDOUT将新进程的错误输出重定向到stdout,stdin=subprocess.PIPE用来将新进程的输入重定向;universal_newlines=True表示以text的方式打开stdout和stderr。

 其他的不推荐使用的模块:

os.system
os.spawn*
os.popen*
popen2.*
commands.*

Python 相关文章推荐
pycharm 使用心得(六)进行简单的数据库管理
Jun 06 Python
Python测试人员需要掌握的知识
Feb 08 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
Apr 05 Python
python 字典 按key值大小 倒序取值的实例
Jul 06 Python
Django forms组件的使用教程
Oct 08 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 Python
利用python实现.dcm格式图像转为.jpg格式
Jan 13 Python
Python requests设置代理的方法步骤
Feb 23 Python
python读取文件指定行内容实例讲解
Mar 02 Python
如何在python中执行另一个py文件
Apr 30 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
Jun 30 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 Python
Python读取环境变量的方法和自定义类分享
Nov 22 #Python
Python中的引用和拷贝浅析
Nov 22 #Python
python实现的文件夹清理程序分享
Nov 22 #Python
Python判断操作系统类型代码分享
Nov 22 #Python
python logging类库使用例子
Nov 22 #Python
Python中模拟enum枚举类型的5种方法分享
Nov 22 #Python
Python读写Excel文件方法介绍
Nov 22 #Python
You might like
php similar_text()函数的定义和用法
2016/05/12 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
js 小贴士一星期合集
2010/04/07 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
JavaScript DOM基础
2015/04/13 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
ES6中异步对象Promise用法详解
2019/07/31 Javascript
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
Python中tell()方法的使用详解
2015/05/24 Python
python实现下载整个ftp目录的方法
2017/01/17 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
python实现诗歌游戏(类继承)
2019/02/26 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
英国行业制服供应商:Alexandra
2019/09/14 全球购物
医学生求职自荐信
2013/10/25 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
信息与工商管理职业规划范文:为梦想而搏击
2014/09/11 职场文书
合法的离婚协议书范本
2014/10/23 职场文书
2014年工程师工作总结
2014/11/25 职场文书
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
2021/04/22 PostgreSQL
Windows和Linux上部署Golang并运行程序
2022/04/22 Servers