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 相关文章推荐
pandas 选择某几列的方法
Jul 03 Python
flask框架中勾子函数的使用详解
Aug 01 Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 Python
Python 2/3下处理cjk编码的zip文件的方法
Apr 26 Python
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
win8.1安装Python 2.7版环境图文详解
Jul 01 Python
Python使用指定端口进行http请求的例子
Jul 25 Python
Python搭建HTTP服务过程图解
Dec 14 Python
python wxpython 实现界面跳转功能
Dec 17 Python
python学习将数据写入文件并保存方法
Jun 07 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 Python
Python关于OS文件目录处理的实例分享
May 23 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
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
php绝对路径与相对路径之间关系的的分析
2010/03/03 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
2015/09/22 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
2017/02/08 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
2020/08/03 PHP
jquery 插件学习(四)
2012/08/06 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
微信小程序位置授权处理方法
2019/06/13 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
完美解决通过IP地址访问VUE项目的问题
2020/07/18 Javascript
python getopt 参数处理小示例
2009/06/09 Python
跟老齐学Python之用Python计算
2014/09/12 Python
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
python删除列表内容
2015/08/04 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python实现在线音乐播放器
2017/03/03 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
详解python中@的用法
2019/03/27 Python
Python3远程监控程序的实现方法
2019/07/15 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
如何在python中处理配置文件代码实例
2020/09/27 Python
The Kooples美国官方网站:为情侣提供的法国当代时尚品牌
2019/01/03 全球购物
2014年党员公开承诺书范文
2014/03/28 职场文书
公安四风对照检查材料思想汇报
2014/10/11 职场文书
2015元旦节寄语
2014/12/08 职场文书
详细总结Python常见的安全问题
2021/05/21 Python
MySQL里面的子查询的基本使用
2021/08/02 MySQL