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中使用HTML模版的教程
Apr 29 Python
Python中关于使用模块的基础知识
May 24 Python
python实现实时监控文件的方法
Aug 26 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
python移位运算的实现
Jul 15 Python
Python如何调用外部系统命令
Aug 07 Python
python中adb有什么功能
Jun 07 Python
Python configparser模块操作代码实例
Jun 08 Python
python中的测试框架
Nov 13 Python
python自动化测试通过日志3分钟定位bug
Nov 20 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/03/07 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
jquery.post用法示例代码
2014/01/03 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
js读写json文件实例代码
2014/10/21 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
Angular2库初探
2017/03/01 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
python中引用与复制用法实例分析
2015/06/04 Python
Python中return语句用法实例分析
2015/08/04 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
python 深度学习中的4种激活函数
2020/09/18 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
html5与css3小应用
2013/04/03 HTML / CSS
水果超市创业计划书
2014/01/27 职场文书
面试后感谢信
2014/02/01 职场文书
低碳环保倡议书
2014/04/14 职场文书
2014年党务公开方案
2014/05/08 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
交通事故起诉书
2015/05/19 职场文书
西柏坡观后感
2015/06/08 职场文书
Python实现为PDF去除水印的示例代码
2022/04/03 Python
Redis keys命令的具体使用
2022/06/05 Redis