3.3Python之subprocess模块

标签: subprocess 子进程 Python
27人阅读 评论(0) 收藏 举报
分类:

基本概念

   从Python2.4开始,Python引入subprocess模块来管理子进程,以取代旧模块的方法。不但可以调用外部的命令作为子进程,而且可以连接到子进程的input/output/error管道,获取相关的返回信息。
  

subprocess模块

  Python的subprocess模块可以实现子进程。该模块只定义了一个类:Popen。可以使用Popen来创建进程,并与进程进行复杂的交互。它的构造函数如下:

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, 
stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None,
 env=None, universal_newlines=False, startupinfo=None, creationflags=0)
  • 参数args:可以是字符串或者序列类型(如:list,元组),用于指定进程的可执行文件及其参数。如果是序列类型,第一个元素通常是可执行文件的路径。也可以显式地使用 execteable参数来指定可执行文件的路径。
  • 参数stdin,stdout,stderr:分别表示程序的标准输入、输出、错误句柄。它们可以是PIPE,文件描述符或文件对象,也可以设置为None,表示从父进程继承。
  • 参数shelll:设置为True,程序将通过shell来执行。
  • 参数env:字典类型,用于指定子进程的环境变量。如果设置为None,表示子进程的环境变量从父进程中继承。

Popen的方法

  • Popen.poll():用于检查子进程是否已经结束。设置并返回returncode属性。
  • Popen.wait():等待子进程结束。设置并返回returncode属性。
  • Popen.communicate(input = None):与子进程交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。commuicate()返回一个元组:(stdoutdata, stderrdata)。注意如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须设置为PIPE。同理,如果希望从stdout和stderr获取数据,比较将stdout和stderr设置为PIPE。
  • Popep.send_signal(signal):向子进程发送信号。
  • Popen.terminate():停止(stop)子进程。在windows平台下,该方法将调用Windows API TerminateProcess()来结束子进程。
  • Popen.kill():杀死子进程。

subprocess中定义数个创建子进程的函数,这些函数分别以不同的方式创建子进程。

  • subprocess.call():父进程等待子进程完成,返回退出信息(returncode属性)
  • subprocess.check_call():父进程等待子进程完成,返回0。检查退出信息,如果returncode不为0,则举出错误subprocess.calledProcessError,该对象包含了returncode属性。
  • subProcess.check_output():父进程等待子进程完成,返回子进程向标准输出的输出结果。检查退出信息,如果returncode不为0,则举出错误subprocess.calledProcessError,该对象包含了returncode属性。

示例演示

import time, subprocess

if __name__ == '__main__':
    print "start main"
   child = subprocess.Popen(["ping","-c","5","www.csdn.com"])
    print("parent process")
    while True:
        print "parent processing"
        time.sleep(2)

从运行结果看,父进程在开启子进程之后,并没有等待子进程完成,而是直接运行print(“parent process”)。

import time, subprocess
if __name__ == '__main__':
print "start main"
child = subprocess.Popen(["ping","-c","5","www.csdn.com"])
child.wait()
print("parent process")
while True:
print "parent processing"
time.sleep(2)

从运行结果看,父进程在开启子进程之后等待子进程完成,再运行print(“parent process”)。

查看评论

<<AI入门(10)>>(C)

我们来讲讲高级求解技术:1.规则演绎系统:我们用if-then规则来求解问题: IF if1 if2 if3 ... THEN then1 then2 ...
  • ghj1976
  • ghj1976
  • 2000-12-29 08:45:00
  • 1168

Python subprocess模块解析

在学习这个模块前,我们先用Python的help()函数查看一下subprocess模块是干嘛的:DESCRIPTION This module allows you to spawn pro...
  • SeeTheWorld518
  • SeeTheWorld518
  • 2015-09-29 12:31:27
  • 2569

python的subprocess模块使用方法

1、subprocess模块可以实现python与底层系统交互 2、方法如下:        import subprocess        subprocess.call("ls")   ...
  • huayucong
  • huayucong
  • 2016-06-24 12:10:58
  • 1586

Python3--Subprocess模块学习总结

Subprocess模块官方文档及源码学习整理
  • msyllxy
  • msyllxy
  • 2017-09-19 11:46:01
  • 321

Python:os模块-subprocess模块

os模块 os.name os.getenv(varname[, value]) os.environ --os.environ["PATH"]= mydir + ";" + os.environ...
  • u013820054
  • u013820054
  • 2016-07-04 17:58:11
  • 416

Python subprocess模块总结

从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system、os.spawn*、os.popen*、popen2.*、comman...
  • bytxl
  • bytxl
  • 2016-01-29 20:17:30
  • 498

python模块系列之 - subprocess

subprocess – 创建附加进程 subprocess模块提供了一种一致的方法来创建和处理附加进程,与标准库中的其它模块相比,提供了一个更高级的接口。用于替换如下模块: ...
  • songfreeman
  • songfreeman
  • 2016-02-25 14:57:08
  • 9118

python3 subprocess模块使用

subprocess 模块@(python3)官网说明文档subprocess.call 和 subprocess.check_call 执行命令,返回状态码。 两者唯一的区别在于返回...
  • CityzenOldwang
  • CityzenOldwang
  • 2017-10-29 09:49:20
  • 1176

Python subprocess 模块, 替换os.system

subprocess被用来替换一些老的模块和函数,如:os.system、os.spawn*、os.popen*、popen2.*、commands.* 可见,subprocess是被推荐使用的模块...
  • jophyyao
  • jophyyao
  • 2012-11-24 12:24:44
  • 1859

python子进程模块subprocess详解与应用实例 之三

二、应用实例解析 2.1 subprocess模块的使用 1. subprocess.call >>> subprocess.call(["ls", "-l"])   0   >>>...
  • fireroll
  • fireroll
  • 2014-09-09 11:05:11
  • 1780
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 23万+
    积分: 3586
    排名: 1万+
    交流学习
      VTK交流群:678462859
    博客专栏
    最新评论