subprocess

咱们能从Python官方文档里读到应该用subprocess 模块来运行系统命令.subprocess模块容许咱们建立子进程,链接他们的输入/输出/错误管道,还有得到返回值。python

subprocess.Popen()

subprocess 模块中基本的进程建立和管理由Popen 类来处理.
subprocess.popen是用来替代os.popen的.
咱们来作一些真实的例子,subprocess.Popen须要一个数组做为参数:shell

import subprocess

p = subprocess.Popen(["echo", "hello world"], stdout=subprocess.PIPE)print p.communicate()

>>>('hello world
', None)
 

注意,虽然你可使用 "shell=True",但并不推荐这样的方式.
若是你知道你只用几个有限的函数,好比PopenPIPE,你能够单单指定这几个函数:数组

from subprocess import Popen, PIPEp1 = Popen(["dmesg"], stdout=PIPE)print p1.communicate()
 

Popen.communicate()

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")
相关文章
相关标签/搜索