Самый простой вариант -- используя цветовые коды и print
print u"\x1b[31;40mЧто-то красное на чёрном\x1b[0m"
Но использовать такую конструкцию очень сложно, особенно если цветовых вариантов больше одного. Да и замена цвета будет той ещё головной болью...
Можно составить "карту" цветов и использовать в виде переменных (или подключить colorama), но это очень неудобно. Примеры в комментах. Или.
Особенно, когда нужно несколько цветов по разным уровням ошибки, и появляется обёртка вида
def mylog-red-black(string):
print u"\x1b[31;40m%s\x1b[0m" % (string,)
....
вторник, 11 августа 2015 г.
понедельник, 8 июня 2015 г.
python: замеряем время выполнения блока
time.time
Очень простой и вполне рабочий метод на базе time, работает даже во 2 питоне (в 3 есть ещё несколько функций в модуле, с бОльшей точностью)
среда, 3 июня 2015 г.
python: Консольная разработка
1) vim
Вариантов много.
2) ipython
centos: yum install python-ipython-console
debian: apt-get install ipython
Может быть частью функционала в vim.
вторник, 2 июня 2015 г.
python: многопоточность
Есть 2 модуля, схожие по названиям и функциям, но работающие чуть по разному, это
threading.Thread
и
multiprocessing.Process
Но threading создаёт нить внутри процесса (количество процессов не меняется), а mp - создаёт новый процесс.
https://docs.python.org/2/library/threading.html
https://docs.python.org/2/library/multiprocessing.html
В остальном использование довольно простое, делаем инстанс класса, start и при необходимости join
threading.Thread
и
multiprocessing.Process
Но threading создаёт нить внутри процесса (количество процессов не меняется), а mp - создаёт новый процесс.
https://docs.python.org/2/library/threading.html
https://docs.python.org/2/library/multiprocessing.html
В остальном использование довольно простое, делаем инстанс класса, start и при необходимости join
понедельник, 1 июня 2015 г.
Python: пишем в syslog
Хороший стартовый пример
https://gist.github.com/sweenzor/1782457
Нюансы.
Для SysLogHandler обязателен адрес, у линукса /dev/log, у macos что-то вроде /var/run/syslog, надо уточнять.
Также можно сделать так
handler = logging.handlers.SysLogHandler(address = ('localhost',514), facility=19)
и тут localhost можно заменить на удаленный хост, хотя лучше поручить пересылку логов тому же rsyslog
Также есть менее удобный модуль syslog
import syslog
syslog.openlog( 'myTestLog', 0, syslog.LOG_LOCAL4 )
syslog.syslog( '%%TEST-6-LOG: Log msg: %s' % 'test msg' )
Ну и напоследок интересный линк
http://help.papertrailapp.com/kb/configuration/configuring-centralized-logging-from-python-apps/
https://gist.github.com/sweenzor/1782457
| 123456789101112131415161718192021 |
|
| 123 |
|
Нюансы.
Для SysLogHandler обязателен адрес, у линукса /dev/log, у macos что-то вроде /var/run/syslog, надо уточнять.
Также можно сделать так
handler = logging.handlers.SysLogHandler(address = ('localhost',514), facility=19)
и тут localhost можно заменить на удаленный хост, хотя лучше поручить пересылку логов тому же rsyslog
Также есть менее удобный модуль syslog
import syslog
syslog.openlog( 'myTestLog', 0, syslog.LOG_LOCAL4 )
syslog.syslog( '%%TEST-6-LOG: Log msg: %s' % 'test msg' )
Ну и напоследок интересный линк
http://help.papertrailapp.com/kb/configuration/configuring-centralized-logging-from-python-apps/
понедельник, 25 мая 2015 г.
python: 7 способов получить hostname
Все работают в линуксе, но далеко не все - в винде. Плюс в ряде случаев hostname и hostname -f могут не совпадать, надо проверить, что лучше подойдёт.
До кучи - есть всякие os.system() и os.popen(), но это совсем костыли и даже не стоят упоминания.
линки
https://wiki.python.org/moin/Powerful%20Python%20One-Liners/Hostname
http://stackoverflow.com/questions/20792499/how-to-get-fully-qualified-host-name-in-python
http://stackoverflow.com/questions/4271740/how-can-i-use-python-to-get-the-system-hostname
1) import os; print os.uname()[1]
2) import platform; print platform.uname()[1] - как 1, но более универсален, работает и в винде
3) import platform; print platform.node()
4) import socket; print socket.gethostname() (подвид: socket.gethostbyaddr(socket.gethostname())
5) import socket; print socket.getfqdn() - 4 и 5 как раз могут дать разные результаты
6 и 7) - совсем костыльные решения, os.getenv('HOSTNAME') и os.environ['HOSTNAME']
До кучи - есть всякие os.system() и os.popen(), но это совсем костыли и даже не стоят упоминания.
линки
https://wiki.python.org/moin/Powerful%20Python%20One-Liners/Hostname
http://stackoverflow.com/questions/20792499/how-to-get-fully-qualified-host-name-in-python
http://stackoverflow.com/questions/4271740/how-can-i-use-python-to-get-the-system-hostname
вторник, 19 мая 2015 г.
python и рекурсивная работа с файлами
1) os.listdir
import os
for filename in os.listdir(os.getcwd()):
if filename.endswith(".txt"):
print(os.path.join(root, file))
2) os.walk
import os
for root, dirs, files in os.walk(yourpath, topdown=False):
for name in files:
print(os.path.join(root, name))
stuff
for name in dirs:
print(os.path.join(root, name))
stuff
3) glob
import glob
for filename in glob.glob('*.txt'):
...
http://stackoverflow.com/questions/18262293/python-open-every-file-in-a-folder
http://stackoverflow.com/questions/3964681/find-all-files-in-directory-with-extension-txt-with-python
import os
for filename in os.listdir(os.getcwd()):
if filename.endswith(".txt"):
print(os.path.join(root, file))
2) os.walk
import os
for root, dirs, files in os.walk(yourpath, topdown=False):
for name in files:
print(os.path.join(root, name))
stuff
for name in dirs:
print(os.path.join(root, name))
stuff
3) glob
import glob
for filename in glob.glob('*.txt'):
...
http://stackoverflow.com/questions/18262293/python-open-every-file-in-a-folder
http://stackoverflow.com/questions/3964681/find-all-files-in-directory-with-extension-txt-with-python
Подписаться на:
Сообщения (Atom)