Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Питон: печать поверх ранее напечатонного  (Прочитано 2520 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Luca Brasi

  • Автор темы
  • Активист
  • *
  • Сообщений: 706
  • typical engineer
    • Просмотр профиля
Думаю подобный вопрос мало достроен отдельной темы. Как сделать, чтобы символ который который выводиться заменял предыдущий... Не знаю как это термином называется. Забой? Ну к примеру проценты выполнения в консольных утилитах можно наблюдать.


Все же вынес в отдельную тему - вопрос с кодировкой не связан.
Sly_tom_cat
« Последнее редактирование: 27 Марта 2015, 11:38:05 от Sly_tom_cat »
Ubuntu 18.04/ AMD Ryzen 5 2600 3.4GHz/ MSI B450-A Pro Max / Crucial DDR4-3000 16384MB / MSI PCI-Ex GeForce GT 710 2048 MB / Chieftec GPS-600

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Питон: печать поверх ранее напечатонного
« Ответ #1 : 26 Марта 2015, 23:25:36 »
Luca Brasi, есть ескейп последовательности, которые стирают весь экран/часть. Не вспомню, где то видел. Искать выделенное словосочетание.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Luca Brasi

  • Автор темы
  • Активист
  • *
  • Сообщений: 706
  • typical engineer
    • Просмотр профиля
Re: Питон: печать поверх ранее напечатонного
« Ответ #2 : 27 Марта 2015, 10:13:33 »
alsoijw, почитал. Есть такая еsc-последовательность '\b Удаление предыдущего
 символа'. Вроде бы должно что то прояснить. Но я пока результата не добился
Ubuntu 18.04/ AMD Ryzen 5 2600 3.4GHz/ MSI B450-A Pro Max / Crucial DDR4-3000 16384MB / MSI PCI-Ex GeForce GT 710 2048 MB / Chieftec GPS-600

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Питон: печать поверх ранее напечатонного
« Ответ #3 : 27 Марта 2015, 10:54:59 »
Luca Brasi, вот это стирает экран "\033[H\033[J\033[m". С \b не знаю, если введён новый абзац, то на предыдущее этот символ не влияет, если текущий, то стирает$ echo -e 'test\n\b\bxt'
test
xt
$ echo -e 'test\b\bxt'
text
$
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Питон: печать поверх ранее напечатонного
« Ответ #4 : 27 Марта 2015, 11:00:14 »
Luca Brasi, в 2.7 '/b' работает, в python3 я тоже не смог добиться от него работы.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Питон: печать поверх ранее напечатонного
« Ответ #5 : 27 Марта 2015, 11:13:22 »
Sly_tom_cat, в смысле не работает? У тебя слеш не в ту сторону.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Питон: печать поверх ранее напечатонного
« Ответ #6 : 27 Марта 2015, 11:27:45 »
Слеш - просто очепятка в сообщении.
Накопал правильное решение
Код: (python) [Выделить]
print('Progress: ', end='', flush=True)
for i in range(11):
  print('%2d'%(i*10), end='\b\b', flush=True)
  sleep(1)

Там ведь еще в чем беда - print по умолчанию после выполнения на новую строку еще курсор переводит. Но что делать по окончанию печати можно поменять параметром end.
Флушить явно вывод тоже полезно иначе могут быть траблы с кешированием вывода.
« Последнее редактирование: 27 Марта 2015, 11:35:17 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Luca Brasi

  • Автор темы
  • Активист
  • *
  • Сообщений: 706
  • typical engineer
    • Просмотр профиля
Re: Питон: печать поверх ранее напечатонного
« Ответ #7 : 27 Марта 2015, 12:08:40 »
Sly_tom_cat, хороший пример.  только до конца не вникну что flush делает. В литературе его раньше не встречал
Ubuntu 18.04/ AMD Ryzen 5 2600 3.4GHz/ MSI B450-A Pro Max / Crucial DDR4-3000 16384MB / MSI PCI-Ex GeForce GT 710 2048 MB / Chieftec GPS-600

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Питон: печать поверх ранее напечатонного
« Ответ #8 : 27 Марта 2015, 12:15:01 »
Luca Brasi, ну дело в том что вывод кешируется и если в примере выше flush=True убрать то у меня например все висит 10 секунда с чистым экраном а потом печчатается "Progress: 100" и выполнение заканчивается. Вся "красота" крутится в буфере но не на экране.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Luca Brasi

  • Автор темы
  • Активист
  • *
  • Сообщений: 706
  • typical engineer
    • Просмотр профиля
Re: Питон: печать поверх ранее напечатонного
« Ответ #9 : 27 Марта 2015, 12:20:47 »
ясно. Попробую поиграться с выводом)
Ubuntu 18.04/ AMD Ryzen 5 2600 3.4GHz/ MSI B450-A Pro Max / Crucial DDR4-3000 16384MB / MSI PCI-Ex GeForce GT 710 2048 MB / Chieftec GPS-600

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Питон: печать поверх ранее напечатонного
« Ответ #10 : 27 Марта 2015, 12:21:18 »
Как я понял, flush в основном касается дисковых операций. Т.к. все расчеты|изменения ведутся в оперативной памяти (в т.ч. кэширование дисковых операций) иногда требуется "вытолкнуть" кэш на диск из оперативной памяти, тем самым очистив её.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Питон: печать поверх ранее напечатонного
« Ответ #11 : 27 Марта 2015, 12:31:03 »
Azure, flush  относится к операциям с кешем (а не с диском).

Если кеш прикручен на вывод на экран - то там flush делает все то же самое, что и при кешированной записи на диск - выталкивает кеш на носитель (в случе с выводом на экран - на экран, в случае с диском - на диск).
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Master_Sergius

  • Активист
  • *
  • Сообщений: 528
  • i3
    • Просмотр профиля
Re: Питон: печать поверх ранее напечатонного
« Ответ #12 : 27 Марта 2015, 13:52:45 »
Ещё добавлю свои 5 копеек:

1) Если в конце инструкции print оставлять запятую, то строка не переводится, будет печать в ту же строку при следующем вызове:

print 'aaa',
print 'bbb'
result:
aaabbb

2) sys.stdout.write - печатает в одну строку
3) для всяких фокусов с выводом символов "нестандартно" есть библиотека ncurses
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Питон: печать поверх ранее напечатонного
« Ответ #13 : 27 Марта 2015, 14:40:01 »
Master_Sergius, все верно, только в 3-м питоне print не оператор (это к п.1), а функция - там запятую некуда ставить (приходится использовать end='').
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Luca Brasi

  • Автор темы
  • Активист
  • *
  • Сообщений: 706
  • typical engineer
    • Просмотр профиля
Re: Питон: печать поверх ранее напечатонного
« Ответ #14 : 27 Марта 2015, 20:22:04 »
а стартовал то флаш с 3.3. Вот кой какое описание на англ.
Ubuntu 18.04/ AMD Ryzen 5 2600 3.4GHz/ MSI B450-A Pro Max / Crucial DDR4-3000 16384MB / MSI PCI-Ex GeForce GT 710 2048 MB / Chieftec GPS-600

 

Страница сгенерирована за 0.017 секунд. Запросов: 21.