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 相关文章推荐
python使用MySQLdb访问mysql数据库的方法
Aug 03 Python
Python计算字符宽度的方法
Jun 14 Python
浅谈对yield的初步理解
May 29 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 Python
PyTorch快速搭建神经网络及其保存提取方法详解
Apr 28 Python
python+opencv实现高斯平滑滤波
Jul 21 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
超简单的Python HTTP服务
Jul 22 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
Python json解析库jsonpath原理及使用示例
Nov 25 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 20 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知识收集
2012/08/20 PHP
php实现批量下载百度云盘文件例子分享
2014/04/10 PHP
php使用curl获取https请求的方法
2015/02/11 PHP
PHP的简单跳转提示的实现详解
2019/03/14 PHP
php解决安全问题的方法实例
2019/09/19 PHP
动态调用css文件——jquery的应用
2007/02/20 Javascript
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
2011/10/12 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
JS实现控制表格单元格垂直对齐的方法
2015/03/30 Javascript
简述vue中的config配置
2018/01/23 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
2020/05/31 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
Js实现粘贴上传图片的原理及示例
2020/12/09 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
Python生成8位随机字符串的方法分析
2017/12/05 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
python 基本数据类型占用内存空间大小的实例
2018/06/12 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
python并发编程 Process对象的其他属性方法join方法详解
2019/08/20 Python
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
公司前台辞职报告
2014/01/19 职场文书
大课间体育活动方案
2014/03/12 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
实名检举信范文
2015/03/02 职场文书
员工自我评价范文
2015/03/11 职场文书
孔繁森观后感
2015/06/10 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
《火烧云》教学反思
2016/02/23 职场文书
Mysql数据库命令大全
2021/05/26 MySQL
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS