subprocess是用于启动进程,并与进程通信的模块。
·格式
该模块定义了一个Popen类:
class 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 应该是字符串或程序参数序列,要执行的程序通常是args序列或字符串中的第一项,但可以使用
executable参数显式设置。
在UNIX 上,当 shell=False(默认), 类Popen 用 os.execvp() 来执行子程序,args通常应该是
一个序列,如果args是一个字符串,它也会被视为只有一个元素的序列。
在UNIX 上,当 shell=True,如果 args 是字符串,它将作为命令行字符串通过shell 执行;如果是
一个序列,它的第一项将作为命令行字符串,其他项将被视为附加的shell参数。
在 Windows 上,类Popen 用 CreateProcess() 来执行子程序,它以字符串作为参数。
如果args是一个序列,它将使用 list2cmdline 方法转换为字符串。需要注意的是,并非所有MS
Windows应用程序都以相同的方式解释命令行,list2cmdline 是为使用与MS C运行规则相同的应用程序而设
计的。
- bufsize 如果被赋值,值将作为内建函数 open() 的参数,0意味着无缓冲,1就是行缓冲,任何其他正值
意味着使用与该值大小接近的缓冲区。负bufsize意味着使用系统默认值,这通常意味着完全缓冲。 bufsize
的默认值为0(无缓冲)。
- stdin, stdout and stderr 分别代表子程序的标准输入,标准输出,标准错误输出的文件句柄。
有效值为PIPE、现有文件描述符(正整数)、现有文件对象和None。若赋值为PIPE ,就会为子程序创
建新管道 ;若为None,不会发生重定向,子程序的文件句柄将从父程序继承。
另外,stderr可以是STDOUT,这表明子程序的错误数据可以被获得并发送到stdout输出。
- preexec_fn 如果preexec_fn设置为可调用对象,则在执行子进程之前,将在子进程中调用此对象。
- close_fds 若为true,则在执行子进程之前将关闭除0,1和2之外的所有文件描述符。
- shell 若为true,则将通过shell执行指定的命令。
- cwd 若不是None,在执行子进程之前,当前目录将更改为cwd。
- env 若不是None,它将为新进程指定环境变量。
- universal_newlines 文件对象stdout和stderr作为文本文件打开,但可以通过 '\n' (Unix), '\r'
(Mac), '\r\n' (Win)断行。所有这些外部表示都被Python程序视为'\n'。注意:仅当Python使用通用换行
支持(默认)构建时,此功能才可用。
注意这些特征只在python支持通用换行的时候有效(默认支持)。
此外,communication() 方法不会更新文件对象stdout,stdin和stderr的换行属性。
- startupinfo, creationflags 如果给定,将传递给底层的 CreateProcess() 函数。它可以指定主窗口
的外观和新进程的优先级等内容。(仅限Windows)
subprocess.startupinfo 详解网址:
http://www.programcreek.com/python/example/5376/subprocess.STARTUPINFO
该模块还定义了两个快捷功能:
call(*args, **kwargs):
使用参数运行命令。等待命令完成,然后返回returncode属性。
参数与Popen构造函数相同。例:
retcode = call(["ls", "-l"])
··异常
在新程序开始执行之前,子进程中引发的异常将在父进程中重新引发。此外&#