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实现异步回调机制代码分享
Jan 10 Python
python中的内置函数getattr()介绍及示例
Jul 20 Python
Python中实现三目运算的方法
Jun 21 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 Python
Python入门_浅谈数据结构的4种基本类型
May 16 Python
Python网络编程之TCP与UDP协议套接字用法示例
Feb 02 Python
在python中实现对list求和及求积
Nov 14 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
Jun 24 Python
Python使用百度api做人脸对比的方法
Aug 28 Python
python2 对excel表格操作完整示例
Feb 23 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
Mar 25 Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 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检测iis环境是否支持htaccess的方法
2014/02/18 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
PHP针对redis常用操作实例详解
2019/08/17 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
js Flash插入函数免激活代码
2009/03/31 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
javaScript知识点总结(必看篇)
2016/06/10 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
js判断数组是否包含某个字符串变量的实例
2017/11/24 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
2018/03/06 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
JS实现网页烟花动画效果
2020/03/10 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
python实现的一个p2p文件传输实例
2014/06/04 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
Python3 实现爬取网站下所有URL方式
2020/01/16 Python
Python3 assert断言实现原理解析
2020/03/02 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
如何利用python生成MD5并去重
2020/12/07 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
拖鞋店创业计划书
2014/01/15 职场文书
交通事故检查书范文
2014/01/30 职场文书
环保公益广告语
2014/03/13 职场文书
护理专业求职信
2014/06/15 职场文书
采购员岗位职责范本
2015/04/07 职场文书