Добрый день подскажите что мне использовать для след. задачи: Написания фронтенда для конс. утилиты, фронтенд должен в реальном времени обрабатывать вывод первой программы.
Одна програмка печатает ход своего выполнения, вторая читает и меняет прогресс бар. Отрывок из
Цитата | 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 )
|
|