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 的話,會把結(jié)果緩存到系統(tǒng)中。導(dǎo)致程序運行完成,上面的程序才會進行打出(會一直卡在readline這個函數(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()實際弱口令我是這樣寫的
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到此這篇關(guān)于Python subprocess.Popen 實時輸出 stdout(正確管道寫法)的文章就介紹到這了,更多相關(guān)Python subprocess.Popen 實時輸出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用jupyter notebook直接打開.md格式的文件
這篇文章主要介紹了使用jupyter notebook直接打開.md格式的文件,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
python3.6.5基于kerberos認證的hive和hdfs連接調(diào)用方式
這篇文章主要介紹了python3.6.5基于kerberos認證的hive和hdfs連接調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python深度學(xué)習(xí)pytorch神經(jīng)網(wǎng)絡(luò)圖像卷積運算詳解
這篇文章主要介紹了Python深度學(xué)習(xí)關(guān)于pytorch神經(jīng)網(wǎng)絡(luò)圖像卷積的運算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10

