Уведомления

Группа в Telegram: @pythonsu

#1 Июль 5, 2011 13:40:49

Nikser
От:
Зарегистрирован: 2011-07-05
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Консольное приложение

Пробовал искать, ничего не нашел - не знаю по каким словам:) Спрашиваю:

Чем реализуется такое поведение:
Консольное приложение должно выводить статистику сайта: (количество пользователей онлайн, количество ботов, последние 10 поисковых запросов). Данные получил. Как теперь их выводить в консоль, чтобы старые данные заменялись на новые?

Т.е. к примеру вывод приложения которое выводит случайное число и после обновляет его каждую секунду:
начало: 1493
1 секунда: (на месте числа 1493, новое допустим 548)
2 секунда: (на месте числа 548, новое….)
и т.д.

Какие модули или классы? Хотелось бы пример. Спасибо:)

И вот еще, допустим если добавить к этому приложению такую функцию:
при нажатии на кнопку R - обновление, а при нажатии на кнопку E - завершение приложения и при этом нужно удалить данные, которые выводило приложение(если реально), к примеру если мы в консоли до выполнения писали:
cd python-script
./monitoring (Запуск)
(Убирает все с консоли (две строчки выше), начинает выводить свой контент)
(при нажатии E, выходит и востанавливает в консоль строчки до вызова)
т.е. в итоге после завершения у нас в консоли чтобы осталось:
cd python-script
./monitoring



Отредактировано (Июль 5, 2011 13:46:18)

Офлайн

#2 Июль 5, 2011 16:08:34

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Консольное приложение

Nikser
Какие модули или классы? Хотелось бы пример. Спасибо:)
#!/usr/bin/python
import sys
import time

for i in xrange(100):
print "-> %03d" % i, "\r",
sys.stdout.flush()
time.sleep(1)
И вот еще, допустим если добавить к этому приложению такую функцию:
при нажатии на кнопку R - обновление, а при нажатии на кнопку E - завершение приложения и при этом нужно удалить данные, которые выводило приложение(если реально)
Для стирания информации с экрана запустите ‘clear’, если у вас Линух или ‘cls’, если windows:
if platform.system() == 'Windows':
subprocess.call("cls", shell=True)
else:
subprocess.call("clear")
Для отлова нажатия клавиши можно вот это попользовать:
http://code.activestate.com/recipes/134892/

Как восстановить что было не знаю. Я думаю это будет зависеть от того, какая ОС/терминал. Лучше не заморачиваться.



Офлайн

#3 Июль 5, 2011 16:38:26

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Консольное приложение

По поводу восстановления. Можно использовать ‘Alternate screen’. Думаю большинство линуховых терминалов это поддерживает.
Если уж очень хочется это сделать, то советую глянуть в исходники какого-нибудь less или аналогичной программы, которые это умеют. Они переключаются в альтернативный экран и выводят все туда, а по завершении возвращаются в исходных. Будет работать не везде, но много где.

PS: Вот, например, описание ‘Alternate screen’ xterm-a: http://www.xfree86.org/current/ctlseqs.html#The%20Alternate%20Screen%20Buffer



Отредактировано (Июль 5, 2011 16:42:02)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version