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自动格式化json文件的方法
Mar 11 Python
简单介绍Python中的RSS处理
Apr 13 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
详解Python各大聊天系统的屏蔽脏话功能原理
Dec 01 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
Mar 12 Python
Python递归函数定义与用法示例
Jun 02 Python
机器学习python实战之决策树
Nov 01 Python
最小二乘法及其python实现详解
Feb 24 Python
python实现飞船大战
Apr 24 Python
用python实现前向分词最大匹配算法的示例代码
Aug 06 Python
python使用ctypes库调用DLL动态链接库
Oct 22 Python
python 实现ping测试延迟的两种方法
Dec 10 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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
PHP crc32()函数讲解
2019/02/14 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
javascript编程起步(第二课)
2007/02/27 Javascript
Prototype 工具函数 学习
2009/07/23 Javascript
javascript 面向对象编程基础:继承
2009/08/21 Javascript
学习ExtJS Column布局
2009/10/08 Javascript
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
vue watch自动检测数据变化实时渲染的方法
2018/01/16 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
python实现图片上添加图片
2019/11/26 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
Python的形参和实参使用方式
2019/12/24 Python
python实现低通滤波器代码
2020/02/26 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
优秀毕业生推荐信
2013/11/02 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
学习保证书
2015/01/17 职场文书
体检通知范文
2015/04/21 职场文书
公司地址变更通知
2015/04/25 职场文书
谢师宴家长致辞
2015/07/27 职场文书
导游词之西递宏村
2019/12/10 职场文书
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电
vue3不同环境下实现配置代理
2022/05/25 Vue.js