Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 18, 2012 18:32:38

chet
От:
Зарегистрирован: 2012-01-30
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Перезапись вывода в командную строку

beelze Хорошо, согласен, что в каких-то случаях лучше по-Вашему. Я тогда не могу понять как можно с помощью ‘\b’ показать на экране ход выполнения программы. Покажите, пожалуйста!
Просто с помощью “\b” не удалить прошлый вывод print'ом. А это мне и нужно! Можно вывести новое сообщение перезаписанное, но старое не удалить! Эврика!



Отредактировано chet (Апрель 18, 2012 18:43:49)

Офлайн

#2 Апрель 18, 2012 18:53:09

beelze
Зарегистрирован: 2012-04-11
Сообщения: 104
Репутация: +  3  -
Профиль   Отправить e-mail  

Перезапись вывода в командную строку

OHSHI… Да что Вы к принту так привязались-то? Ну можно и с принтом ежели желаете:

>>> import sys, tiem
>>> for i in range(100):
...   if i != 0: print '\b'*6,
...   else: print 'header',
...   print (str(i)+'%').ljust(4),
...   sys.stdout.flush()
...   time.sleep(0.05)
...
header 99%

Отредактировано beelze (Апрель 18, 2012 18:56:40)

Офлайн

#3 Апрель 18, 2012 18:57:52

chet
От:
Зарегистрирован: 2012-01-30
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Перезапись вывода в командную строку

beelze А теперь сравните с первым предложенным способом и посмотрите, где меньше кода! Вот этого я и добивался от Вас!



Офлайн

#4 Апрель 18, 2012 19:36:31

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Перезапись вывода в командную строку

chet
beelze А теперь сравните с первым предложенным способом и посмотрите, где меньше кода! Вот этого я и добивался от Вас!

Хорош наглец, однако.



Отредактировано cutwater (Апрель 18, 2012 19:37:29)

Офлайн

#5 Апрель 18, 2012 20:57:07

beelze
Зарегистрирован: 2012-04-11
Сообщения: 104
Репутация: +  3  -
Профиль   Отправить e-mail  

Перезапись вывода в командную строку

Ричи был прав - Difficult to Cure, иначе и не скажешь

Офлайн

#6 Апрель 19, 2012 06:19:44

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Перезапись вывода в командную строку

chet
Просто стало интересно, можно ли так сделать?
Например, хочу вывести на экран ход выполнения проги в процентах.
То есть можно ли перезаписать print определенной переменной в предыдущей итерации?
Есть замечательная вещь, называется curses
Держи, дарю, пригодится
import curses, time
class ProgressBar(object):
    def __init__(self, start_string, bar_char, width):
       curses.initscr()
       self.width=width+len(start_string)
       
       self.win = curses.newwin(3,self.width+30,14,10)
       self.win.border(0)
       self.win.addstr(1,1, '%s ' % start_string)
       self.pos=len(start_string)+2
       self.bar_char=bar_char
    def show_progress(self):
       self.win.addstr(1,self.pos, self.bar_char)
       self.win.refresh()
       self.pos += 1
    
    def stop(self, end_string):   
       self.win.addstr(1,self.width, end_string)
       self.win.refresh()
       self.win.addstr(1,self.width+len(end_string), 'Press any key')
       self.win.refresh()
       self.win.getch() 
       curses.endwin()
progress=ProgressBar('Process in progress','#', 20)
for i in range(10000):
    if not i%500:
       progress.show_progress()
       time.sleep(0.1)
progress.stop("Ok!")



Отредактировано FishHook (Апрель 19, 2012 06:20:32)

Офлайн

#7 Апрель 19, 2012 09:54:35

chet
От:
Зарегистрирован: 2012-01-30
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Перезапись вывода в командную строку

В общем, всем спасибо!
Не понял, правда чем заслужил такое внимание!
Благодарю за помощь!



Офлайн

#8 Апрель 19, 2012 10:12:25

Chern
От: Киев
Зарегистрирован: 2010-09-15
Сообщения: 71
Репутация: +  3  -
Профиль   Отправить e-mail  

Перезапись вывода в командную строку

chet, суть не в print или sys.stdout.write/flush, а в \r и \b.

Если \r - это возврат каретки в начало строки, то \b - на один символ назад. В контексте поставленной задачи можно выбирать между ними.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version