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 负数取模运算实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python3 itchat实现微信定时发送群消息的实例代码

    Python3 itchat实现微信定时发送群消息的实例代码

    使用微信,定时往指定的微信群里发送指定信息。接下来通过本文给大家分享Python3 itchat实现微信定时发送群消息的实例代码,需要的朋友可以参考下
    2019-07-07
  • Python实现数据透视表详解

    Python实现数据透视表详解

    今天小编就为大家分享一篇用Python实现数据的透视表的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-10-10
  • 基于python计算并显示日间、星期客流高峰

    基于python计算并显示日间、星期客流高峰

    这篇文章主要介绍了基于python显示日间、星期客流高峰,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Python异常信息的不同展现方法总结

    Python异常信息的不同展现方法总结

    在日常开发的过程中,当代码报错时,我们通常要不断打印、阅读traceback提示信息,来调试代码,这篇文章介绍了如何实现一个Exception Hooks,使得traceback模块的提示信息更加精确;同时还介绍了一些第三方库,这些库也提供了Exception Hooks的功能
    2022-11-11
  • Pandas 多层索引操作的实现

    Pandas 多层索引操作的实现

    本文主要介绍了Pandas 多层索引操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • 利用Python写了一个水果忍者小游戏

    利用Python写了一个水果忍者小游戏

    这篇文章主要介绍了利用Python写了一个水果忍者小游戏,
    2022-05-05
  • PyTorch中的方法torch.randperm()示例介绍

    PyTorch中的方法torch.randperm()示例介绍

    在 PyTorch 中,torch.randperm(n) 函数用于生成一个从 0 到 n-1 的随机排列的整数序列,这篇文章主要介绍了PyTorch中的方法torch.randperm()介绍,需要的朋友可以参考下
    2024-05-05
  • Python中read()、readline()和readlines()三者间的区别和用法

    Python中read()、readline()和readlines()三者间的区别和用法

    这篇文章主要给大家介绍了关于Python中读取文件的read()、readline()和readlines()方法三者间的区别和用法,需要的朋友可以参考下
    2017-07-07
  • Python通过rembg实现图片背景去除功能

    Python通过rembg实现图片背景去除功能

    在图像处理领域,背景移除是一个常见且重要的任务,Python中的rembg库就是一个强大的工具,它基于深度学习技术,能够准确、快速地移除图像背景,本文将结合多个实际案例,详细介绍rembg库的安装、基本用法、高级功能以及在实际项目中的应用,需要的朋友可以参考下
    2024-09-09

最新评论