日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2025/3/15 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python subprocess.Popen 实时输出 stdout(正确管道写法) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

大部分的程序是這樣的:

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

但是由于子程序沒(méi)有進(jìn)行 flush 的話,會(huì)把結(jié)果緩存到系統(tǒng)中。導(dǎo)致程序運(yùn)行完成,上面的程序才會(huì)進(jìn)行打出(會(huì)一直卡在readline這個(gè)函數(shù))。

解決方法:

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

實(shí)際弱口令我是這樣寫(xiě)的

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()

記小的寫(xiě)法

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

單次管道輸出寫(xiě)法

方法一

# -*- 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()

方法二(待測(cè)試)

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

?

總結(jié)

以上是生活随笔為你收集整理的Python subprocess.Popen 实时输出 stdout(正确管道写法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。