Форум сайта python.su
0
beelze Хорошо, согласен, что в каких-то случаях лучше по-Вашему. Я тогда не могу понять как можно с помощью ‘\b’ показать на экране ход выполнения программы. Покажите, пожалуйста!
Просто с помощью “\b” не удалить прошлый вывод print'ом. А это мне и нужно! Можно вывести новое сообщение перезаписанное, но старое не удалить! Эврика!
Отредактировано chet (Апрель 18, 2012 18:43:49)
Офлайн
3
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)
Офлайн
0
beelze А теперь сравните с первым предложенным способом и посмотрите, где меньше кода! Вот этого я и добивался от Вас!
Офлайн
19
chet
beelze А теперь сравните с первым предложенным способом и посмотрите, где меньше кода! Вот этого я и добивался от Вас!
Отредактировано cutwater (Апрель 18, 2012 19:37:29)
Офлайн
3
Ричи был прав - Difficult to Cure, иначе и не скажешь
Офлайн
568
chetЕсть замечательная вещь, называется curses
Просто стало интересно, можно ли так сделать?
Например, хочу вывести на экран ход выполнения проги в процентах.
То есть можно ли перезаписать print определенной переменной в предыдущей итерации?
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)
Офлайн
0
В общем, всем спасибо!
Не понял, правда чем заслужил такое внимание!
Благодарю за помощь!
Офлайн
3
chet, суть не в print или sys.stdout.write/flush, а в \r и \b.
Если \r - это возврат каретки в начало строки, то \b - на один символ назад. В контексте поставленной задачи можно выбирать между ними.
Офлайн