Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Имею консольную утилиту, не могу написать гуи


Автор: aspolyakov 5.1.2009, 11:07
Добрый день подскажите что мне использовать для след. задачи: Написания фронтенда для конс. утилиты,  фронтенд должен в реальном времени обрабатывать вывод первой программы.

Одна програмка печатает ход своего выполнения, вторая читает и меняет прогресс бар.
Отрывок из 
Цитата

     if showProgress:
         while processedRecordsAmount<totalRecords:
             if ( processedRecordsAmount/percent > lastPercentage ):
                 seconds = time.time() - timeStamp
                 seconds = int ( seconds )
                 if seconds>0:
                     #seconds = 1
                     timeStamp = time.time()
                     perSecond = int( abs( ( processedRecordsAmount - lastAmount )/seconds ) )
                     avgSum = avgSum + perSecond
                     sec = sec+1
                     avgPerSecond = avgSum / sec
                 lastAmount = processedRecordsAmount
                 lastPercentage = processedRecordsAmount/percent
                 sval = str( processedRecordsAmount/percent )+"% Remaining: "+str (totalRecords-processedRecordsAmount)+" records, Per second: "+str(perSecond)+ " , avg: "+str(avgPerSecond)+", Errors: "+str(Errors)+"\n"
                 print (sval)
#                 sys.stdout.write (sval) Пробовал за место принта
#                 sys.stdout.flush()
         sval = str( processedRecordsAmount/percent )+"% Remaining: "+str (totalRecords-processedRecordsAmount)+" records, Per second: "+str(perSecond)+ " , avg: "+str(avgPerSecond)+", Errors: "+str(Errors)+"\n"
         print (sval)# sys.stdout


Это кусок кода из гуи, в котором будет два раза запущена первая утилита. Недостаток реализации в том, что время выполнения конс утилиты как-то влияет на гуи и гуи зависает. Короче говоря, какие проблемы в коде? Что лучше использовать заместо Popen?


Цитата

        stdinpipe = subprocess.PIPE
        stdoutpipe = subprocess.PIPE
        p = subprocess.Popen('c:\import.bat',
                     universal_newlines = True,
                      stdin  = stdinpipe,
                      stdout = stdoutpipe, 
                      stderr = subprocess.PIPE)
        percent = 0
        s=''
        self.form.progress.setMaximum(200)
        while (True):
            self.form.setWindowTitle("Repgen "+str(self.form.progress.value()/2)+"%")
            p.stdout.flush()
            s = p.stdout.readline()
            sys.stdout.write(s)
            splitted = s.split("%")
            try:
                value = int ( splitted[0] )
                percent = percent+1
                print percent
                self.form.increase_progress_value( 1 )
                
            except:
                value = 0
            if (percent>199):
                break
        self.form.progress.setValue( 0 )
        self.form.progress.setEnabled( False )


Автор: aspolyakov 5.1.2009, 11:29
У меня Python 2.5, windows

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)