咱们能从Python官方文档里读到应该用subprocess
模块来运行系统命令.subprocess
模块容许咱们建立子进程,链接他们的输入/输出/错误管道,还有得到返回值。python
subprocess
模块中基本的进程建立和管理由Popen
类来处理.subprocess.popen
是用来替代os.popen
的.
咱们来作一些真实的例子,subprocess.Popen
须要一个数组做为参数:shell
注意,虽然你可使用 "shell=True",但并不推荐这样的方式.
若是你知道你只用几个有限的函数,好比Popen
和PIPE
,你能够单单指定这几个函数:数组
communicate()
函数返回一个tuple
(标准输出和错误).Popen.communicate()
和进程沟通:发送数据到标准输入.从标准输出和错误读取数据直到遇到结束符.等待进程结束.
输入参数应该是一个字符串,以传递给子进程,若是没有数据的话应该是None
.
基本上,当你用 communicate()
函数的时候意味着你要执行命令了.函数
subprocess.check_output:编码
Python3中的subprocess.check_output函数能够执行一条sh命令,并返回命令的输出内容,用法以下:spa
output = subprocess.check_output(["python3", "xx.py"], shell = False)
该函数两个参数第一个表示命令内容,由于中间有空格因此用中括号这种形式,同时制定shell=False表示命令分开写了。而该命令执行后的输出内容会返回给output变量。code
须要注意的是这个output变量并非一个string,也就是说不能用string的一些函数,返回的实际上是一个编码后的比特值,实际的编码格式取决于调用的命令,所以python3将解码过程交给应用层,也就是咱们使用的人来作。这样就清晰了,要对输出使用stirng的操做,须要先经过解码将其转换成string:coffeescript
output = subprocess.check_output(["python3", "xx.py"], shell = False) out = output.decode() if (out.find("yes") >= 0): print("yes") else: print("no")