大部分的程序是这样的:

from subprocess import Popen, PIPE, STDOUTp = Popen(cmd, stdout=PIPE, stderr=STDOUT, shell=True)
while True:print(p.stdout.readline())if not line: break

但是由于子程序没有进行 flush 的话,会把结果缓存到系统中。导致程序运行完成,上面的程序才会进行打出(会一直卡在readline这个函数)。

解决方法:

p = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=1)
for line in iter(p.stdout.readline, b''):print line,
p.stdout.close()
p.wait()

实际弱口令我是这样写的

import subprocess     #Popenproc = subprocess.Popen(medusaCMD, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
for line in iter(proc.stdout.readline, b''):print lineif not subprocess.Popen.poll(proc) is None:if line == "":break
proc.stdout.close()

记小的写法

proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
try:while True:buff = proc.stdout.readline()print(buff)if buff == '' and proc.poll() != None:breakelse:.....
except Exception:data["status"] = -1
finally:return data

单次管道输出写法

# -*- coding: UTF-8 -*-import re
import sys
import subprocess
from subprocess import Popen, PIPE, STDOUT#docker_info = {"CONTAINER ID":"", "NAME":"", "CPU %":"", "MEM USAGE / LIMIT":"", \
#               "MEM %":"", "NET I/O":"", "BLOCK I/O":"", "PIDS":""}
docker_list = []cmd = "docker stats -a --no-stream"
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
try:buff = proc.communicate()stritem = buff[0]str_list = re.split(r'  +|\n', stritem)for i in range(8, len(str_list)-1):if i % 8 == 0:value = 0docker_info = {}docker_info["CONTAINER ID"] = str_list[i]else:value += 1if value == 1:docker_info["NAME"] = str_list[i]elif value == 2:docker_info["CPU %"] = str_list[i]elif value == 3:docker_info["MEM USAGE / LIMIT"] = str_list[i]elif value == 4:docker_info["MEM %"] = str_list[i]elif value == 5:docker_info["NET I/O"] = str_list[i]elif value == 6:docker_info["BLOCK I/O"] = str_list[i]elif value == 7:docker_info["PIDS"] = str_list[i]docker_list.append(docker_info)value = 0print docker_list
except Exception as e:print "error", esys.exit(1)proc.stdout.close()

python subprocess.Popen 实时输出 stdout相关推荐

  1. Python subprocess.Popen 实时输出 stdout(正确管道写法)

    大部分的程序是这样的: from subprocess import Popen, PIPE, STDOUTp = Popen(cmd, stdout=PIPE, stderr=STDOUT, she ...

  2. python popen阻塞_对Python subprocess.Popen子进程管道阻塞详解

    问题产生描述 使用子进程处理一个大的日志文件,并对文件进行分析查询,需要等待子进程执行的输出结果,进行下一步处理. 出问题的代码 # 启用子进程执行外部shell命令 def __subprocess ...

  3. python subprocess popen 多次重定向_python subprocess.Popen系列问题

    最近在项目中遇到一个需求,前端发来一个命令,这个命令是去执行传递过来的一个脚本(shell 或者python),并返回脚本的标准输出和标准出错,如果执行超过设定时间还没结束就超时,然后终止脚本的执行. ...

  4. Python: subprocess.Popen()不支持unicode问题解决

    Python: subprocess.Popen()不支持unicode问题解决 参考文章: (1)Python: subprocess.Popen()不支持unicode问题解决 (2)https: ...

  5. Python Subprocess Popen 管道阻塞问题分析解决

    Python Subprocess Popen 管道阻塞问题分析解决 参考文章: (1)Python Subprocess Popen 管道阻塞问题分析解决 (2)https://www.cnblog ...

  6. python subprocess Popen

    转载 http://blog.163.com/yi_yixinyiyi/blog/static/136286889201152234037495/ 2011-06-22 15:40:37|  分类:  ...

  7. python subprocess popen 无法打开_使用subprocess.Popen()在python脚本中设置PYTHONPATH失败...

    本问题已经有最佳答案,请猛点这里访问. 如果自定义模块不在sys.path变量的任何目录中,下面的代码允许我动态地标识和加载该模块. import sys sys.path.append(" ...

  8. python subprocess.Popen简明总结

    2019独角兽企业重金招聘Python工程师标准>>> ###subprocess.Popen### 首先先看Popen类: class subprocess.Popen( args ...

  9. python subprocess popen输入密码_python subprocess, Popen

    参考 http://zsl-oo7.blog.163.com/blog/static/353297032013101101820439/ 一:基本概念 subprocess模块中只定义了一个类,Pop ...

最新文章

  1. 公示 | 首届中国智能心电大赛初赛结果
  2. AttributeError: module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘解决方法
  3. arm编译安装openCV整理
  4. 苹果天气不显示_iPhone6开机不显示苹果售后维修案例
  5. 目前中关村在线上面的CPU排行情况
  6. mybatis-批量操作
  7. 水文-接口和抽象类有什么不同
  8. ASP.NET高并发解决方案
  9. Tree UVALive - 8212
  10. 10个 Linux/Unix下 Bash 和 KSH shell 的作业控制实例
  11. 从pg_hba.conf文件谈谈postgresql的连接认证
  12. HTML5学习之视频与音频(三)
  13. ORA-27125: unable to create shared memory segment
  14. java.net.InetAddress 获取系统 MAC 地址 与 IP 地址
  15. python安装os模块_centeros安装python3过程
  16. 湖北省小学生计算机大赛,2019年湖北省中小学电脑制作活动机器人竞赛类暨创客竞赛类项目选拔赛圆满落幕...
  17. AD9361开发:接收与发送滤波器配置
  18. html js3d魔方,40行JavaScript代码实现的3D旋转魔方动画效果
  19. Qt 5.7 亮瞎眼的更新
  20. 基于Java的大型网站设计方案

热门文章

  1. Python基本语法_函数_返回值
  2. 如何排查模组无法识别SIM卡?
  3. Keil工程Lib库文件的制作和运用
  4. iOS 12 真机调试 Xcode 9 提示 Could not locate device support files.
  5. “产教融合新范式,校企聚力新实践”——2018杭州云栖大会大学合作专场论坛成功举办...
  6. 阅读笔记:Solving the “false positives” problem in fraud prediction
  7. Tomcat默认访问页面
  8. MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API(转)...
  9. 【vijos】P1448 校门外的树
  10. SolrJ查询Solr数据