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 fabric实现远程操作和部署示例
Mar 25 Python
如何在Python中编写并发程序
Feb 27 Python
python对json的相关操作实例详解
Jan 04 Python
tensorflow获取变量维度信息
Mar 10 Python
NumPy 基本切片和索引的具体使用方法
Apr 24 Python
python+django+rest框架配置创建方法
Aug 31 Python
opencv python如何实现图像二值化
Feb 03 Python
python递归调用中的坑:打印有值, 返回却None
Mar 16 Python
python安装dlib库报错问题及解决方法
Mar 16 Python
keras 多gpu并行运行案例
Jun 10 Python
python Gabor滤波器讲解
Oct 26 Python
PyTorch中clone()、detach()及相关扩展详解
Dec 09 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实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
JavaScript 原型链学习总结
2010/10/29 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
浅谈window对象的scrollBy()方法
2015/07/15 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
手机端转换rem适应
2017/04/01 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
[57:59]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第一场 11.05
2020/11/05 DOTA
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
深入浅出学习python装饰器
2017/09/29 Python
python使用代理ip访问网站的实例
2018/05/07 Python
python组合无重复三位数的实例
2018/11/13 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
pytorch梯度剪裁方式
2020/02/04 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
机电专业求职信
2014/06/14 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
嘉宾邀请函
2015/01/31 职场文书
禁毒主题班会教案
2015/08/14 职场文书
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python