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妹子图简单爬虫实例
Jul 07 Python
Python sqlite3事务处理方法实例分析
Jun 19 Python
virtualenv实现多个版本Python共存
Aug 21 Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 Python
python多进程实现文件下载传输功能
Jul 28 Python
解决python tkinter界面卡死的问题
Jul 17 Python
python障碍式期权定价公式
Jul 19 Python
通过实例学习Python Excel操作
Jan 06 Python
Keras官方中文文档:性能评估Metrices详解
Jun 15 Python
Python环境管理virtualenv&amp;virtualenvwrapper的配置详解
Jul 01 Python
Python实现封装打包自己写的代码,被python import
Jul 12 Python
Python中pass的作用与使用教程
Nov 13 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计算两个路径的相对路径
2013/06/14 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
2016/11/25 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
php use和include区别总结
2019/10/13 PHP
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
javascript获取图片的top N主色值方法详解
2018/01/26 Javascript
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
python调用cmd复制文件代码分享
2013/12/27 Python
详解Python中的type()方法的使用
2015/05/21 Python
Python实现字符串逆序输出功能示例
2017/06/24 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
在django admin中添加自定义视图的例子
2019/07/26 Python
Python HTMLTestRunner可视化报告实现过程解析
2020/04/10 Python
html5 canvas-1.canvas介绍(hello canvas)
2013/01/07 HTML / CSS
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
P/Invoke是什么
2015/07/31 面试题
教师节宣传方案
2014/05/23 职场文书
经销商年会策划方案
2014/05/29 职场文书
年终工作总结范文2014
2014/11/27 职场文书
安全生产感想
2015/08/07 职场文书
600字作文之感受大自然
2019/11/27 职场文书