Python subprocess.Popen 实时输出 stdout的解决方法(正确管道写法)

 更新时间:2023年07月18日 11:41:07   作者:墨痕诉清风  
这篇文章主要介绍了Python subprocess.Popen实时输出stdout正确管道写法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

大部分的程序是这样的:

from subprocess import Popen, PIPE, STDOUT
p = 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     #Popen
proc = subprocess.Popen(medusaCMD, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
for line in iter(proc.stdout.readline, 'b'):
    print line
    if 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:
            break
        else:
            .....
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 = 0
            docker_info = {}
            docker_info["CONTAINER ID"] = str_list[i]
        else:
            value += 1
            if 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 = 0
    print docker_list
except Exception as e:
    print "error", e
    sys.exit(1)
    proc.stdout.close()

方法二(待测试)

import subprocess
from multiprocessing.dummy import Pool as ThreadPool
command = poc + ' -t ' + ip + ' -p ' + port
result = subprocess.getoutput(command)
if 'WARNING: SERVER IS VULNERABLE' in result:
    result = AAAAA
else:
    result = BBBBBB

到此这篇关于Python subprocess.Popen 实时输出 stdout(正确管道写法)的文章就介绍到这了,更多相关Python subprocess.Popen 实时输出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python判断输入日期为第几天的实例

    python判断输入日期为第几天的实例

    今天小编就为大家分享一篇python判断输入日期为第几天的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python编程快速上手——正则表达式查找功能案例分析

    Python编程快速上手——正则表达式查找功能案例分析

    这篇文章主要介绍了Python正则表达式查找功能,结合具体实例形式分析了Python基于正则表达式遍历查找指定格式文件的相关操作技巧,需要的朋友可以参考下
    2020-02-02
  • pandas重复行删除操作df.drop_duplicates和df.duplicated的区别

    pandas重复行删除操作df.drop_duplicates和df.duplicated的区别

    本文主要介绍了pandas重复行删除操作df.drop_duplicates和df.duplicated的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 对Python2与Python3中__bool__方法的差异详解

    对Python2与Python3中__bool__方法的差异详解

    今天小编就为大家分享一篇对Python2与Python3中__bool__方法的差异详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python常用的json标准库

    Python常用的json标准库

    今天小编就为大家分享一篇关于Python常用的json标准库,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Django添加feeds功能的示例

    Django添加feeds功能的示例

    这篇文章主要介绍了Django添加feeds功能的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • 基于Python爬虫采集天气网实时信息

    基于Python爬虫采集天气网实时信息

    这篇文章主要介绍了基于Python爬虫采集天气网实时信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python计算两个地址之间的距离方法

    python计算两个地址之间的距离方法

    今天小编就为大家分享一篇python计算两个地址之间的距离方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python实现将元组中的元素作为参数传入函数的操作

    Python实现将元组中的元素作为参数传入函数的操作

    这篇文章主要介绍了Python实现将元组中的元素作为参数传入函数的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python实现跨excel的工作表sheet之间的复制方法

    python实现跨excel的工作表sheet之间的复制方法

    今天小编就为大家分享一篇python实现跨excel的工作表sheet之间的复制方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05

最新评论