Форум сайта python.su
0
Просто стало интересно, можно ли так сделать?
Например, хочу вывести на экран ход выполнения проги в процентах.
То есть можно ли перезаписать print определенной переменной в предыдущей итерации?
Офлайн
3
>>> import sys >>> for i in range(100000): ... sys.stdout.write('\r%s' % i) ... sys.stdout.flush()
Отредактировано Chern (Апрель 18, 2012 15:25:49)
Офлайн
3
думаю, этого достаточно будет:
>>> print '123\b\baa' 1aa
Офлайн
0
Спасибо Chern
Я уже нашел в книжке именно этот способ под названием “индикатор выполнения процесса”!
beelze этот способ я попробовал, но перезаписи нет!
Офлайн
3
>этот способ я попробовал, но перезаписи нет!
и под win и под linux это работает. а что значит «нет перезаписи»? print ‘123\b\baa’ выдает не «1aa» а «123aa»? Смысл \b (backspace) в том, что иногда неудобно всю строку перепечатывать - логика вывода «заголовка» и собственно перезаписываемой части может быть разнесена, поэтому стирается (нужным к-вом \b) только то, что было ранее выведено в рамках «перезаписываемости». Ну и конечно, IRL надо, как указал Chern, использовать именно sys.stdout.write() и .flush() - я иллюстрировал только использование \b, без «готового» кода
Офлайн
0
beelze выдает “1аа” все нормально. Только мне надо выводить изменяемую переменную в цикле.
Нет перезаписи - это значит, что по Вашему варианту выводится результат в столбик с каждой итерацией, а мне нужен вывод результата текущей итерации!
то есть не так:
0% 1% 2% и т.д.
Офлайн
19
chet
В примере с процентом выполнения проги - это текущий процент, а остальных процентов на экране не должно быть!
import sys from time import sleep for i in range(100): sys.stdout.write('%2s%%' % i) sys.stdout.flush() sleep(1) sys.stdout.write('\b' * 3)
Отредактировано cutwater (Апрель 18, 2012 17:38:52)
Офлайн
3
chet, вопрос был про перезапись, так? вот я и предоставил пример собственно перезаписи, а не «готового» кода. Остальное Chern детально пояснил, а я детально пояснил принципиальную разницу. Нужно же принцип понимать а не просто куски кода копипастить.
Отредактировано beelze (Апрель 18, 2012 17:39:08)
Офлайн
0
cutwater смотрите сообщение Chern. Повтор.
Так покажите же как Вы это делаете?А такие вопросы возникают, когда не читаете предыдущие сообщения и сразу на людей кидаться)))
Отредактировано chet (Апрель 18, 2012 18:18:07)
Офлайн
3
>С помощью print нельзя добиться того, что я хочу.
а при чем тут собственно print? в большинстве случаев print x и делает что-то вроде sys.stdout.write(str(x)+'\n'). просто сравните сколько набирать в одном случае и сколько во втором, а иллюстративности ничуть не добавилось. Принцип заключается в выводе управляющих символов \r и \b а как именно Вы будете на консоль их выводить - не важно.
>>> print 'too much is not enough', '\b'*12, 'definitely enough' too much is definitely enough
Офлайн