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连接数据库
Mar 16 Python
用Python给文本创立向量空间模型的教程
Apr 23 Python
在Python中用split()方法分割字符串的使用介绍
May 20 Python
动态规划之矩阵连乘问题Python实现方法
Nov 27 Python
python批量替换页眉页脚实例代码
Jan 22 Python
使用NumPy读取MNIST数据的实现代码示例
Nov 20 Python
使用python实现希尔、计数、基数基础排序的代码
Dec 25 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
Jupyter notebook 启动闪退问题的解决
Apr 13 Python
Python基础详解之描述符
Apr 28 Python
python 如何执行控制台命令与操作剪切板
May 20 Python
Appium中scroll和drag_and_drop根据元素位置滑动
Feb 15 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编程中的常见漏洞和代码实例
2014/08/06 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
PHP时间函数使用详解
2019/03/21 PHP
精解window.setTimeout()&amp;window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
FF IE浏览器修改标签透明度的方法
2014/01/27 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
js获取当前页的URL与window.location.href简单方法
2017/02/13 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
JS实现分页导航效果
2020/02/19 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
Python 元组(Tuple)操作详解
2014/03/11 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
python SVD压缩图像的实现代码
2019/11/05 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
如何学习Python time模块
2020/06/03 Python
Python如何对齐字符串
2020/07/30 Python
python的数学算法函数及公式用法
2020/11/18 Python
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
2012/10/05 面试题
网络安全方面的面试题
2016/01/07 面试题
自荐信需注意事项
2014/01/25 职场文书
战略合作协议书范本
2014/04/18 职场文书
上课不认真检讨书
2014/09/17 职场文书
2014民事授权委托书范本
2014/09/29 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
CSS 圆形进度栏
2021/04/06 HTML / CSS
特别篇动画《总之就是非常可爱 ~制服~》PV公开,2022年夏季播出
2022/04/04 日漫