18-5 常用模块(subprocess)

当我们需要调用系统的命令的时候,最先考虑的os模块。用os.system()和os.popen()来进行操作。但是这两个命令过于简单,不能完成一些复杂的操作,如给运行的命令提供输入或者读取命令的输出,判断该命令的运行状态,管理多个命令的并行等等。这时subprocess中的Popen命令就能有效的完成我们需要的操作。

subprocess模块允许一个进程创建一个新的子进程,通过管道连接到子进程的stdin/stdout/stderr,获取子进程的返回值等操作。

这个模块只有一个类:Popen

创建Popen对象:

import subprocess

obj = 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,元组),用于指定进程的可执行文件及其参数。如果是序列类型,第一个元素通常是可执行文件的路径。我们也可以显式的使用executeable参数来指定可执行文件的路径。在windows操作系统上,Popen通过调用CreateProcess()来创建子进程,CreateProcess接收一个字符串参数,如果args是序列类型,系统将会通过list2cmdline()函数将序列类型转换为字符串。
  • bufsize:指定缓冲。我到现在还不清楚这个参数的具体含义,望各个大牛指点。
  • executable:用于指定可执行程序。一般情况下我们通过args参数来设置所要运行的程序。如果将参数shell设为True,executable将指定程序使用的shell。在windows平台下,默认的shell由COMSPEC环境变量来指定。
  • stdin,stdout,stderr:分别表示程序的标准输入、输出、错误句柄。他们可以是PIPE,文件描述符或文件对象,也可以设置为None,表示从父进程继承。
  • preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用。
  • close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。我们不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
  • shell:设置为true,程序才能通过shell来执行。
  • cwd:用于设置子进程的当前目录。
  • env:是字典类型,用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
  • universal_newlines:不同操作系统下,文本的换行符是不一样的。如:windows下用’/r/n’表示换,而Linux下用’/n’。如果将此参数设置为True,Python统一把这些换行符当作’/n’来处理。
  • startupinfo,createionflags:只在windows下用效,它们将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等。

subprocess.PIPE

import subprocess

a = subprocess.Popen(‘ipconfig‘, shell=True, stdout=subprocess.PIPE)
print(str(a.stdout.read(), ‘gbk‘))

在创建Popen对象时,subprocess.PIPE可以初始化stdin, stdout或stderr参数。表示与子进程通信的标准流。这是因为subprocess创建了子进程,结果本在子进程中,if 想要执行结果转到主进程中,就得需要一个管道,即 : stdout=subprocess.PIPE。

subprocess.STDOUT

创建Popen对象时,用于初始化stderr参数,表示将错误通过标准输出流输出。

参考:http://www.cnblogs.com/yuanchenqi/articles/5732581.html

  

时间: 2024-10-14 19:38:43

18-5 常用模块(subprocess)的相关文章

常用模块——subprocess模块

subprocess模块 subprocess主要用于执行系统指令(启动子进程)与os.system 的不同在于 #subprocess可以与这个子进程进行数据交换. import subprocess #从管道中读取数据 管道就是 两个进程通讯的媒介 cmd = r'dir F:\Python_exe' res = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)#cmd 命令语句 shell选项 stdout输出正确管道 prin

Python全栈之路----常用模块----subprocess模块

我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python2有os.system, >>> os.system('uname -a') Darwin Alexs-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Sun Jun 4 21:43:07 PDT 2017; root:xnu-3

python_day06 常用模块xml/configparser/hashlib/subprocess 面向对象程序设计

常用模块shutilxmlconfigparserhashlibsuprocess面向对象的程序设计 常用模块 xml模块 1 <?xml version="1.0"?> 2 <data> 3 <country name="Liechtenstein"> 4 <rank updated="yes">2</rank> 5 <year>2008</year> 6 &l

python 常用模块 time random os模块 sys模块 json &amp; pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess logging re正则 转自老男孩老师Yuan:http://www.cnblogs.com/yuanchenqi/articles/5732581.html 模块&包(* * * * *) 模块(modue)的概念: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,

常用模块-----configparser &amp; subprocess

configparser 模块 功能:操作模块类的文件,configparser类型文件的操作类似于字典,大多数用法和字典相同. 新建文件: import configparser cfg=configparser.ConfigParser() cfg['DEFAULT']={'ServerAliveInterval': '45', 'Compression': 'yes', 'CompressionLevel': '9', 'ForwardX11':'yes' } cfg['bitbucket

python基础--常用模块与面向对象基础

1常用模块 1.1 xml xml是实现不同语言或程序之间进行数据交换的协议 xml的格式如下: <?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2008</year> <gdppc>141100</gdp

python常用模块-------转自林海峰老师

常用模块 一 time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行"type(time.time())",返回的是float类型. 格式化的时间字符串(Format String) 结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时) 1 import tim

Day5 - Python基础5 常用模块学习

Python 之路 Day5 - 常用模块学习 本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,

自动化运维Python系列(五)之常用模块

模块 用一坨代码实现了某个功能的代码集合 模块分为三种 · 自定义模块 · 第三方模块 · 内置模块 1)自定义模块 自己编写并存在在某个路径下的python程序,实现了某个功能,可以被其他程序调用 2)第三方模块 网络上下载并能兼容当前Python版本的第三方程序模块,比如支持HTTP测试的requests库 3)内置模块 C:\Python3.5\Lib目录下的py文件大部分都是Python的内置模块,如sys.os.time等 导入模块 import module from module.

Day05 - Python 常用模块

1. 模块简介 模块就是一个保存了 Python 代码的文件.模块能定义函数,类和变量.模块里也能包含可执行的代码. 模块也是 Python 对象,具有随机的名字属性用来绑定或引用. 下例是个简单的模块support.py 1 def print_func( par ): 2 print("Hello : ", par) 3 return 1)import 语句 想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下: import module1[, m