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编写简单的画图板程序的示例教程
Dec 08 Python
Python学习笔记之解析json的方法分析
Apr 21 Python
Python安装官方whl包和tar.gz包的方法(推荐)
Jun 04 Python
Python中with及contextlib的用法详解
Jun 08 Python
Python中使用支持向量机(SVM)算法
Dec 26 Python
Python引用计数操作示例
Aug 23 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
python opencv pytesseract 验证码识别的实现
Aug 28 Python
Python selenium环境搭建实现过程解析
Sep 08 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
Nov 20 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 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树的代码,可以嵌套任意层
2006/10/09 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
2010/11/01 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
PHP文件操作方法汇总
2015/07/01 PHP
js 事件小结 表格区别
2007/08/13 Javascript
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
Juery解决tablesorter中文排序和字符范围的方法
2015/05/06 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
基于vue.js的分页插件详解
2017/11/27 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
Python subprocess模块学习总结
2014/03/13 Python
Python FTP操作类代码分享
2014/05/13 Python
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
详解numpy.meshgrid()方法使用
2019/08/01 Python
python反转列表的三种方式解析
2019/11/08 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
护理实习自我鉴定
2013/12/14 职场文书
幼儿园中班新学期寄语
2014/01/18 职场文书
综合实践教学反思
2014/01/31 职场文书
应用外语系自荐信
2014/06/26 职场文书
怎样写离婚协议书
2014/09/10 职场文书
模范班主任事迹材料
2014/12/17 职场文书
新郎接新娘保证书
2015/05/08 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
python turtle绘图命令及案例
2021/11/23 Python