Python中使用subprocess执行一系列cmd命令时,偶尔会出现阻塞情况,命令没有继续执行完毕。
原因:
#subprocess的PIPE是有大小的。在python2.6.11之前,PIPE的大小为文件页的大小(i386上是4096),
# 2.6.11之后变为65536.因此当输出内容超过65536,会引起阻塞
解决:
1.使用临时文件tempfile扩展缓存区;
2.去掉不必要输出,以减少输出量的大小
方案1,使用临时文件tempfile扩容缓存:
out_temp = tempfile.SpooledTemporaryFile(bufsize=10 * 1000)
fileno = out_temp.fileno()
process = subprocess.Popen(cmd, stdout=fileno, stderr=fileno, shell=True) # stdout=subprocess.PIPE,
方案2,视实际情况减少不必要数据。