Найти - Пользователи
Полная версия: Перезапись вывода в командную строку
Начало » Python для новичков » Перезапись вывода в командную строку
1 2
chet
beelze Хорошо, согласен, что в каких-то случаях лучше по-Вашему. Я тогда не могу понять как можно с помощью ‘\b’ показать на экране ход выполнения программы. Покажите, пожалуйста!
Просто с помощью “\b” не удалить прошлый вывод print'ом. А это мне и нужно! Можно вывести новое сообщение перезаписанное, но старое не удалить! Эврика!
beelze
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%
chet
beelze А теперь сравните с первым предложенным способом и посмотрите, где меньше кода! Вот этого я и добивался от Вас!
cutwater
chet
beelze А теперь сравните с первым предложенным способом и посмотрите, где меньше кода! Вот этого я и добивался от Вас!

Хорош наглец, однако.
beelze
Ричи был прав - Difficult to Cure, иначе и не скажешь
FishHook
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!")
chet
В общем, всем спасибо!
Не понял, правда чем заслужил такое внимание!
Благодарю за помощь!
Chern
chet, суть не в print или sys.stdout.write/flush, а в \r и \b.

Если \r - это возврат каретки в начало строки, то \b - на один символ назад. В контексте поставленной задачи можно выбирать между ними.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB