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之画圈还不简单吗?
Sep 20 Python
python爬虫获取京东手机图片的图文教程
Dec 29 Python
基于pandas数据样本行列选取的方法
Apr 20 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 Python
python引入不同文件夹下的自定义模块方法
Oct 27 Python
python正则表达式去除两个特殊字符间的内容方法
Dec 24 Python
浅谈python requests 的put, post 请求参数的问题
Jan 02 Python
Django发送邮件和itsdangerous模块的配合使用解析
Aug 10 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
python 调用API接口 获取和解析 Json数据
Sep 28 Python
Python读写锁实现实现代码解析
Nov 28 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
根德Grundig S400/S500/S700电路分析
2021/03/02 无线电
php二维数组转成字符串示例
2014/02/17 PHP
php session 写入数据库
2016/02/13 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
juqery 学习之三 选择器 可见性 元素属性
2010/11/25 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
javascript弹出窗口中增加确定取消按钮
2016/06/24 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
微信小程序实现页面下拉刷新和上拉加载功能详解
2018/12/03 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
2020/07/28 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
Python for循环生成列表的实例
2018/06/15 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
Python Subprocess模块原理及实例
2019/08/26 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
Paper Cape官网:美国婴儿和儿童服装品牌
2019/11/02 全球购物
个人自我评价和职业目标
2014/01/24 职场文书
大宝sod蜜广告词
2014/03/21 职场文书
摩登时代观后感
2015/06/03 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL
一文简单了解MySQL前缀索引
2022/04/03 MySQL