就是需要下载八个文件,然后每个文件的下载进度都是可以从popen流中获取到,但是显示在界面的进度条只有最后一个,前面的不显示进度
import subprocess
from PyQt5 import QtWidgets
from PyQt5.QtCore import QDir, QObject, pyqtSignal, QRunnable
from PyQt5.QtWidgets import QFileDialog, QApplication
from ui.program import select_program
from util.serialtools import get_serials
class WorkSignal(QObject):
# 完成信号
finished = pyqtSignal()
# 结果信号
result = pyqtSignal(object)
# 进度信号
progress = pyqtSignal(str)
# 输出打印流信号
stdout = pyqtSignal(bytes)
class WorkRunnable(QRunnable):
global filepath
def __init__(self):
super(WorkRunnable, self).__init__()
self.data = None
self.filepath = None
self.namelist = None
self.workSignal = WorkSignal()
self.isStop = False
# self.SerialThread = SerialThread()
# self.SerialThread.getfiles()
# self.com = self.SerialThread.getComList()
# self.filepath = self.SerialThread.getfiles()
def program(self, com, filename):
# 获取文件上级目录
p_filename = os.path.abspath(os.path.join(filename, ".."))
cmd_first_step = r'QSaharaServer.exe -p \\.\{} -s 13:{}'.format(com, filename)
print(cmd_first_step)
cmd_second_step = r'fh_loader.exe --port=\\.\{} --sendxml=rawprogram_unsparse0.xml,patch0.xml ' \
r'--search_path="{}" --noprompt --showpercentagecomplete --memoryname=eMMC'.format(com,
p_filename)
print(com, cmd_second_step)
popen = subprocess.Popen(cmd_first_step, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
# for line in iter(popen.stdout.readline, b''):
# print(line.decode("gbk").split("\n\r"))
popen.wait()
popen2 = subprocess.Popen(cmd_second_step, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout = popen2.stdout
self.workSignal.stdout.emit(stdout)
self.workSignal.finished.emit()
def getSerialName(self):
namelist = []
com_information = get_serials()
for name in com_information:
if "QDLoader" in "".join(name):
namelist.append(name.name)
return namelist
def getImageFilePath(self):
global filepath
dlg = QFileDialog()
dlg.setFileMode(QFileDialog.ExistingFiles)
dlg.setFilter(QDir.Files)
if dlg.exec_():
# 返回的是打开文件的路径列表
filename = dlg.selectedFiles()
# filenames.append(filename)
self.contents.setText(str(filename))
# # print(filenames)
filepath = filepath + "[".join(filename)
return self.filepath
def dealWithData(self, data):
for line in iter(data.readline, b''):
line = line.decode("gbk").split(" ")
if "transferred" in line:
rate_of_progress = line[-1].strip("\n\r}")
rate_of_progress = float(rate_of_progress.strip("%")) / 100
print(rate_of_progress)
if "Finished" in line:
rate_of_progress = "pass"
QApplication.processEvents()
else:
if rate_of_progress < 1.0:
rate_of_progress = rate_of_progress
else:
rate_of_progress = "pass"
self.progress.emit(rate_of_progress)
self.finished.emit()
# 刷新页面
# QApplication.processEvents()
print(line)
class MyProgramWindow(QtWidgets.QMainWindow, select_program.Ui_Form):
def __init__(self, parent=None):
super(MyProgramWindow, self).__init__(parent)
self.temp = []
self.setupUi(self)
self.pb_upload_file.clicked.connect(lambda: getImageFilePath(self.contents))
if name == 'main':
import sys
import cgitb
cgitb.enable(format='text')
app = QApplication(sys.argv)
ui = MyProgramWindow()
ui.show()
sys.exit(app.exec_())
可以试试tqdm