1.概述
这篇文章介绍并行运算中的subprocess模块,subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。
subprocess 它可以用来调用第三方工具(例如:exe、另一个python文件、命令行工具)
subprocess 模块首先推荐使用的是它的 run 方法,更高级的用法可以直接使用 Popen 接口
subprocess 模块提供了了三个 API 处理进程。Python 3.5 中添加的 run() 函数,是一个运行进程高级 API,也可以收集它的输出。call(),check_call() 以及 check_output() 是从 Python2 继承的较早的高级 API。在已存的程序中,它们仍然被广泛支持和使用。
类 Popen 是一个低级 API,用于构建其他的 API 以及用于更复杂的进程交互。Popen 构造函数接受参数设置新进程,以便父进程可以通过管道与它通信。它提供了它替代的模块和函数的所有功能,以及更多功能。
API 对于所有使用场景是一致的,许多之前必要的额外步骤(例如关闭额外的文件描述符并确保通道关闭)现在已经内置了,无需单独代码处理。
subprocess模块的目的在于替换几个旧的模块和方法,替换 os.system(),os.spawnv() , os 和 popen2 模块中 popen 的变体以及 commands() 模块等。为了更容易地将 subprocess 同其他模块比较,本节中的许多示例都重新创建了用于 os 和 popen2 中的。
command = “\”%s\" --m xxx --t True \"%s\"" %(yyy,ttt)
t= subprocess.Popen(command, shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,stdin=subprocess.PIPE)
t.stdin.close()
str_output = p.stdout.readlines()
t.wait()
print("str_output = %s" %str_output)
if str(str_output [len(str_output ) -1], 'utf-8').rstrip() == ''write data ok" :
print("ok")