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实现敲电子木鱼加功德效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2024-12-12
  • Python构建简单线性回归模型

    Python构建简单线性回归模型

    这篇文章主要介绍了Python构建简单线性回归模型,线性回归表示发现函数使用线性组合表示输入变量。简单线性回归很容易理解,使用了基本的回归技术,一旦理解了这些基本概念,可以更好地学习其他类型的回归模型
    2022-08-08
  • Python对比校验神器deepdiff库使用详解

    Python对比校验神器deepdiff库使用详解

    deepdiff模块常用来校验两个对象是否一致,包含3个常用类,DeepDiff,DeepSearch和DeepHash,其中DeepDiff最常用,可以对字典,可迭代对象,字符串等进行对比,使用递归地查找所有差异,本文给大家讲解Python对比校验神器deepdiff库,感兴趣的朋友一起看看吧
    2023-04-04
  • 在Python GUI中处理用户输入的各种技巧分享

    在Python GUI中处理用户输入的各种技巧分享

    本文通过Python GUI框架tkinter,探讨如何处理用户输入,包括实时验证、焦点离开事件、阻止非法字符输入等,并提供完整案例;帮助开发者提升用户体验,需要的朋友可以参考下
    2026-06-06
  • 使用jupyter notebook直接打开.md格式的文件

    使用jupyter notebook直接打开.md格式的文件

    这篇文章主要介绍了使用jupyter notebook直接打开.md格式的文件,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python中的套接字编程是什么?

    Python中的套接字编程是什么?

    不可否认,互联网已成为“存在之魂”,其活动以“连接”或“网络”为特征.使用套接字的最关键的基础之一,使这些网络成为可能.本文涵盖了有关使用Python进行套接字编程的所有领域.套接字可以帮助您建立这些连接,而Python无疑可以简化连接,需要的朋友可以参考下
    2021-06-06
  • pytorch masked_fill报错的解决

    pytorch masked_fill报错的解决

    今天小编就为大家分享一篇pytorch masked_fill报错的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python实现图像全景拼接

    python实现图像全景拼接

    这篇文章主要为大家详细介绍了python实现图像全景拼接,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • python3.6.5基于kerberos认证的hive和hdfs连接调用方式

    python3.6.5基于kerberos认证的hive和hdfs连接调用方式

    这篇文章主要介绍了python3.6.5基于kerberos认证的hive和hdfs连接调用方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python深度学习pytorch神经网络图像卷积运算详解

    Python深度学习pytorch神经网络图像卷积运算详解

    这篇文章主要介绍了Python深度学习关于pytorch神经网络图像卷积的运算示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10

最新评论