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中利用Into包整洁地进行数据迁移的教程
Mar 30 Python
python字典基本操作实例分析
Jul 11 Python
python简单商城购物车实例代码
Mar 15 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
Feb 18 Python
jupyter实现重新加载模块
Apr 16 Python
Python流程控制语句的深入讲解
Jun 15 Python
python的链表基础知识点
Sep 13 Python
Python列表嵌套常见坑点及解决方案
Sep 30 Python
在终端启动Python时报错的解决方案
Nov 20 Python
python基于tkinter制作无损音乐下载工具
Mar 29 Python
粗暴解决CUDA out of memory的问题
May 22 Python
利用Python将list列表写入文件并读取的方法汇总
Mar 25 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
收音机指标测试方法及仪器
2021/03/01 无线电
php 上传功能实例代码
2010/04/13 PHP
php cc攻击代码与防范方法
2012/10/18 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
php命令行用法入门实例教程
2014/10/27 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
两个DIV等高的JS的实现代码
2007/12/23 Javascript
用apply让javascript函数仅执行一次的代码
2010/06/27 Javascript
基于jquery的模态div层弹出效果
2010/08/21 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
javascript实现连续赋值
2015/08/10 Javascript
JS上传组件FileUpload自定义模板的使用方法
2016/05/10 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
Wallis官网:英国女装零售商
2020/01/21 全球购物
劳动模范事迹材料
2014/01/19 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
森林防火宣传标语
2014/06/27 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
昆虫记读书笔记
2015/06/26 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
2019年教师入党申请书
2019/06/27 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技