Есть ли простой способ добавить индикатор выполнения / счетчик, где я могу добавить строку, чтобы увеличить его время от времени - не по времени - PullRequest
0 голосов
/ 09 июня 2019

У меня есть сценарий, который в основном завершен.Я хотел бы добавить к нему какой-нибудь индикатор выполнения, вместо того, чтобы распечатывать каждый шаг, когда он проходит мимо

, есть ли что-нибудь, что позволит мне это сделать.

настроить прогрессwidget / counter / loop дают ему командную функцию для увеличения

сделать какой-нибудь скрипт добавить код для продвижения / увеличить индикатор выполнения сделать еще один скрипт добавить код для продвижения / увеличить индикатор выполнения сделать еще один скрипт добавитькод, чтобы продвигать / увеличивать индикатор выполнения, сделать еще несколько сценариев, добавить код, чтобы продвигать / увеличивать индикатор выполнения

также, не могли бы вы дать мне какой-нибудь пример, который я посмотрел на 3 или 4 различныхбиблиотеки типов «Индикатор выполнения», и ни одна из них не приводит пример того, как это делается, во всех примерах, которые, как мне кажется, я нахожу, хотят сделать это по времени или по байту для загрузки файлов

Ответы [ 2 ]

1 голос
/ 09 июня 2019

В PIP есть ряд индикаторов выполнения, я рекомендую ezprogress , если вы запускаете python3.

from ezprogress.progressbar import ProgressBar
import time

# Number of steps in your total script
steps_needed = 100
current_step = 0

# setup progress bar
pb = ProgressBar(steps_needed, bar_length=100)
pb.start()


# Do what your script wants
...

# Increment counter
current_step += 1
pb.update(current_step)

# Do what your script wants
...


# When you are done you can force the progress bar to finish
PB.finished()

Индикатор выполнения не поддерживает отключение оценки времени, однако этотеперь возможно в самой новой версии, просто обновите с PIP.

Чтобы отключить оценку времени, просто нужно запустить индикатор выполнения с параметром no_time=True, как показано в коде ниже:

pb = ProgressBar(steps_needed, bar_length=100, no_time=True)
0 голосов
/ 10 июня 2019

создайте свой модуль progressbar.py

import sys
import copy
currentProgressCnt = 0
progressCntMax     = 0  # 
progressBarWidth   = 50 # in chars
scaleFctr          = 0.0
tasksToDo          = []
class ProgressIndicator:
    def showProgress(self):
        global progressCntMax
        global currentProgressCnt
        cr                 = "\r"
        progressChar       = '#'
        fillChar           = '.'
        progressBarDone = currentProgressCnt*progressChar*scaleFctr
        progressBarRemain = fillChar*(progressCntMax - currentProgressCnt)*scaleFctr
        percent = str(int((float(currentProgressCnt)/float(progressCntMax))*100)) + " % completed "
        taskId = '(' + tasksToDo[currentProgressCnt - 1] + ') '
        quote = str(currentProgressCnt) + '/' + str(progressCntMax) + ' '
        sys.stdout.write(cr + progressBarDone + progressBarRemain + ' ' + percent + taskId + quote)
        sys.stdout.flush()
        if currentProgressCnt == progressCntMax:
            print
    def incProgress(self):
        global currentProgressCnt
        currentProgressCnt += 1

    def setLastStep(self, size):
        global progressCntMax, scaleFctr
        progressCntMax = size
        scaleFctr = progressBarWidth / progressCntMax
    def setTaskList(self, taskList):
        global tasksToDo
        tasksToDo = copy.copy(taskList)
        self.setLastStep(len(tasksToDo))

в основном, используйте класс ProgressIndicator следующим образом:

from progressbar import ProgressIndicator
import time 
import datetime
#########################################
###              MAIN                 ###
###           SIMULATION              ###       
#########################################

# your procedure list you have to run
toDoList = ['proc1', 'proc2', 'proc3', 'proc1', 'proc4', 'proc5', 
            'proc6', 'proc7', 'proc21', 'proc32', 'proc43', 'proc51',
            'proc4', 'proc65', 'proc76', 'proc87']
progressLine = ProgressIndicator() # create your indicator
progressLine.setTaskList(toDoList) # set params

# your main work
i = 0; lastTask = len(toDoList)
# log the start
startTime = str(datetime.datetime.now())
print ( startTime + " main started")
while i <  lastTask:
    # run your task list here
    time.sleep(1) # simulating your toDoList[i]() run
    i += 1
    progressLine.incProgress()   # use when task done, incrase progress 
    progressLine.showProgress()  # use for update display
# work is done, log the end
endTime = str(datetime.datetime.now())
print ( endTime + " main finished")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...